>Hi.. > >many thanx for posting the source.. >but not all of the files got here? > It might have saved some time and bandwidth if you'd told me which ones you did get. 10 ;EFT VERSION 1.8C (COMBAT) 11/30/81 COPYRIGHT CHRIS CRAWFORD 1981 20 ; 30 ;Page zero RAM 40 ; 50 ;These locations are for the mainline routines 60 ; 70 CHUNKX=$BE 80 CHUNKY=$BF 90 CORPS=$B4 0100 *=$C0 0110 MAPPTR *=*+2 0120 ARMY *=*+1 0130 UNITNO *=*+1 0140 DEFNDR *=*+1 0150 TEMPR *=*+1 0160 TEMPZ *=*+1 0170 ACCLO *=*+1 0180 ACCHI *=*+1 0190 TURN *=*+1 0200 LAT *=*+1 0210 LONG *=*+1 0220 RFR *=*+1 0230 TRNTYP *=*+1 0240 SQVAL *=*+1 0250 ; 0260 ; 0270 CONSOL=$D01F 0280 AUDF1=$D200 0290 AUDC1=$D201 0300 RANDOM=$D20A 0310 NMIEN=$D40E 0320 ; 0330 ;THESE VALUES ARE USED BY MAINLINE ROUTINE ONLY 0340 ; 0350 EARTH=$606 0360 TRNCOD=$62B 0370 *=$636 0380 SQX *=*+1 adjacent square 0390 SQY *=*+1 0400 *=$68E 0410 DELAY *=*+1 0420 HANDCP *=*+1 0430 TOTGS *=*+1 0440 TOTRS *=*+1 0450 OFR *=*+1 0460 HOMEDR *=*+1 0470 ZOC *=*+1 0480 TEMPQ *=*+1 0490 LLIM *=*+1 0500 VICTRY *=*+1 0510 ; 0520 ;declarations of routines in other modules 0530 ; 0540 INVERT=$4D26 0550 STALL=$7200 0560 TERR=$7240 0570 TERRB=$7246 0580 Y00=$72DE 0590 TERRTY=$7369 0600 DNUMBR=$7BB2 0610 JSTP=$799C 0620 DWORDS=$79C0 0630 SWITCH=$79EF 0640 DEFNC=$79B4 0650 OFFNC=$7BF6 0660 XINC=$7BF2 0670 YINC=$7BF1 0680 ; 0690 *=$5400 0700 CORPSX *=*+159 x-coords of all units (pixel frame) 0710 CORPSY *=*+159 y-coords of all units (pixel frame) 0720 MSTRNG *=*+159 muster strengths 0730 CSTRNG *=*+159 combat strengths 0740 SWAP *=*+159 terrain code underneath unit 0750 ARRIVE *=*+159 turn of arrival 0760 WORDS *=*+272 various words for messages 0770 CORPT *=*+159 codes for unit types 0780 CORPNO *=*+159 ID numbers of units 0790 HDIGIT *=*+256 tables for displaying numbers (hundreds) 0800 TDIGIT *=*+256 tens tables 0810 ODIGIT *=*+256 ones tables 0820 TXTTBL *=*+96 more text 0830 MONLEN *=*+13 table of month lengths 0840 HMORDS *=*+159 how many orders each unit has in queue 0850 WHORDS *=*+159 what the orders are 0860 WHORDH *=*+159 0870 BEEPTB *=*+4 table of beep tones 0880 ERRMSG *=*+128 table of error messages 0890 XOFF *=*+4 offsets for moving maltakreuze 0900 YOFF *=*+4 0910 MASKO *=*+4 mask values for decoding orders 0920 XADD *=*+4 offsets for moving arrow 0930 YADD *=*+4 0940 TRTAB *=*+13 tree color table 0950 MLTKRZ *=*+8 maltese cross shape 0960 ; 0970 ;RAM from $6000 to $6430 is taken up by 0980 ;character sets and the display list 0990 ; 1000 *=$6431 1010 ARRTAB *=*+32 arrow shapes 1020 *=$6450 1030 TXTWDW *=$6CB1 1040 STKTAB *=*+16 a joystick decoding table 1050 SSNCOD *=*+12 season codes 1060 TRNTAB *=*+60 terrain cost tables 1070 BHX1 *=*+22 intraversible square pair coordinates 1080 BHY1 *=*+22 1090 BHX2 *=*+22 1100 BHY2 *=*+22 1110 EXEC *=*+159 execution times 1120 ; 1130 *=$4ED8 1140 ; 1150 ;combat routine 1160 ; 1170 LDA #$00 1180 STA VICTRY clear victory flag 1190 LDX ARMY 1200 CPX #$2A Finns can't attack 1210 BEQ A10 1220 CPX #$2B 1230 BNE A11 1240 A10 RTS 1250 A11 LDY UNITNO 1260 STY DEFNDR 1270 LDX DEFNDR make combat graphics 1280 LDA SWAP,X 1290 PHA 1300 LDA #$FF solid red square 1310 CPX #$37 Russian unit? 1320 BCS B1 1330 LDA #$7F make it white for Germans 1340 B1 STA SWAP,X 1350 STX CORPS 1360 LDA CORPSX,X 1370 STA CHUNKX 1380 LDA CORPSY,X 1390 STA CHUNKY 1400 JSR SWITCH 1410 LDY #$08 1420 LDX #$8F 1430 LOOP78 STX AUDC1 1440 STY AUDF1 1450 JSR STALL 1460 TYA 1470 CLC 1480 ADC #$08 1490 TAY 1500 DEX 1510 CPX #$7F 1520 BNE LOOP78 1530 ; 1540 ;now replace original unit character 1550 ; 1560 JSR SWITCH 1570 LDX DEFNDR 1580 PLA 1590 STA SWAP,X 1600 ; 1610 ; 1620 JSR TERRTY terrain in defender's square 1630 LDX DEFNC,Y defensive bonus factor 1640 LDA CSTRNG,Y defender's strength 1650 LSR A 1660 Y15 DEX adjust for terrain 1670 BEQ Y16 1680 ROL A 1690 BCC Y15 1700 LDA #$FF 1710 ; 1720 ;now adjust for defender's motion 1730 ; 1740 Y16 LDX HMORDS,Y 1750 BEQ DOBATL 1760 LSR A 1770 ; 1780 ;evaluate defender's strike 1790 ; 1800 DOBATL CMP RANDOM 1810 BCC ATAKR 1820 LDX ARMY 1830 DEC MSTRNG,X 1840 LDA CSTRNG,X 1850 SBC #$05 1860 STA CSTRNG,X 1870 BEQ Z28 1880 BCS Y24 1890 Z28 JMP DEAD attacker dies 1900 Y24 JSR BRKCHK attacker lives; does he break? 1910 ; 1920 ;evaluate attacker's strike 1930 ; 1940 ATAKR LDX ARMY 1950 LDA CORPSX,X 1960 STA LONG 1970 LDA CORPSY,X 1980 STA LAT 1990 JSR TERR 2000 JSR TERRTY 2010 LDA OFFNC,Y 2020 TAY 2030 LDX ARMY 2040 LDA CSTRNG,X 2050 DEY 2060 BEQ Y19 2070 LSR A river attack penalty 2080 Y19 CMP RANDOM 2090 BCC A20 2100 LDX DEFNDR attacker strikes defender 2110 DEC MSTRNG,X 2120 LDA CSTRNG,X 2130 SBC #$05 2140 STA CSTRNG,X 2150 BEQ Z29 2160 BCS Y25 2170 Z29 JSR DEAD defender dies 2180 A20 JMP ENDCOM 2190 Y25 JSR BRKCHK does defender break? 2200 BCC A20 2210 LDY ARMY 2220 LDA WHORDS,Y 2230 AND #$03 2240 TAY first retreat priority : away from attacker 2250 JSR RETRET 2260 BCC VICCOM defender died 2270 BEQ Y27 defender may retreat 2280 LDY #$01 second priority: east/west 2290 CPX #$37 2300 BCS Y28 2310 LDY #$03 2320 Y28 JSR RETRET 2330 BCC VICCOM 2340 BEQ Y27 2350 LDY #$02 third priority: north 2360 JSR RETRET 2370 BCC VICCOM 2380 BEQ Y27 2390 LDY #$00 fourth priority: south 2400 JSR RETRET 2410 BCC VICCOM 2420 BEQ Y27 2430 LDY #$03 last priority: west/east 2440 CPX #$37 2450 BCS Y26 2460 LDY #$01 2470 Y26 JSR RETRET 2480 BCC VICCOM 2490 BNE ENDCOM 2500 Y27 STX CORPS retreat the defender 2510 LDA CORPSX,X 2520 STA CHUNKX 2530 LDA CORPSY,X 2540 STA CHUNKY 2550 JSR SWITCH 2560 LDX CORPS 2570 LDA LAT 2580 STA CORPSY,X 2590 STA CHUNKY 2600 LDA LONG 2610 STA CORPSX,X 2620 STA CHUNKX 2630 JSR SWITCH 2640 VICCOM LDX ARMY 2650 STX CORPS 2660 LDA CORPSX,X 2670 STA CHUNKX 2680 LDA CORPSY,X 2690 STA CHUNKY 2700 LDA ACCLO defender's coordinates 2710 STA LONG 2720 LDA ACCHI 2730 STA LAT 2740 LDA #$FF 2750 STA VICTRY 2760 ENDCOM LDX ARMY 2770 INC EXEC,X 2780 RTS 2790 ; 2800 ;Subroutines for combat 2810 ;input: X = ID # of defender. Y = proposed DIR of retreat 2820 ;output: C bit set if defender lives, clear if dies 2830 ;Z bit set if retreat open, clear if blocked 2840 ; 2850 RETRET LDA CORPSX,X 2860 CLC 2870 ADC XINC,Y 2880 STA LONG 2890 LDA CORPSY,X 2900 CLC 2910 ADC YINC,Y 2920 STA LAT 2930 JSR TERR examine terrain 2940 JSR TERRTY 2950 LDX DEFNDR 2960 LDA UNITNO anybody in this square? 2970 BNE Y22 2980 LDA TRNTYP no 2990 ; 3000 ;check for bad ocean crossings 3010 ; 3020 CMP #$07 coastline? 3030 BCC Y41 3040 CMP #$09 3050 BEQ Y22 3060 LDY #$15 3070 LOOP42 LDA LAT 3080 CMP BHY1,Y 3090 BNE Y43 3100 LDA LONG 3110 CMP BHX1,Y 3120 BNE Y43 3130 LDA CORPSX,X 3140 CMP BHX2,Y 3150 BNE Y43 3160 LDA CORPSY,X 3170 CMP BHY2,Y 3180 BEQ Y22 3190 Y43 DEY 3200 BPL LOOP42 3210 ; 3220 ;any blocking ZOC's? 3230 ; 3240 Y41 JSR CHKZOC 3250 LDX DEFNDR 3260 LDA ZOC 3270 CMP #$02 3280 BCS Y22 no retreat into ZOC 3290 LDA #$00 retreat is possible 3300 SEC 3310 RTS 3320 Y22 LDA CSTRNG,X retreat not possible,extract penalty 3330 SEC 3340 SBC #$05 3350 STA CSTRNG,X 3360 BEQ Z27 3370 BCS Y23 3380 Z27 JSR DEAD 3390 CLC 3400 Y23 LDA #$FF 3410 RTS 3420 ; 3430 ;supply evaluation routine 3440 ; 3450 LDA ARRIVE,X 3460 CMP TURN 3470 BEQ Z86 3480 BCC Z86 3490 RTS 3500 Z86 LDA #$18 3510 CPX #$37 3520 BCS A13 3530 LDA #$18 3540 LDY EARTH 3550 CPY #$02 mud? 3560 BEQ A12 3570 CPY #$0A snow? 3580 BNE A13 3590 LDA CORPSX,X this discourages gung-ho corps 3600 ASL A double distance 3610 ASL A 3620 ADC #$4A 3630 CMP RANDOM 3640 BCC A12 3650 LDA #$10 harder to get supplies in winter 3660 A13 STA ACCLO 3670 LDY #$01 Russians go east 3680 CPX #$37 3690 BCS Z80 3700 LDY #$03 Germans go west 3710 Z80 STY HOMEDR 3720 LDA CORPSX,X 3730 STA LONG 3740 LDA CORPSY,X 3750 STA LAT 3760 LDA #$00 3770 STA RFR 3780 LOOP91 LDA LONG 3790 STA SQX 3800 LDA LAT 3810 STA SQY 3820 LOOP90 LDA SQX 3830 CLC 3840 ADC XINC,Y 3850 STA LONG 3860 LDA SQY 3870 CLC 3880 ADC YINC,Y 3890 STA LAT 3900 JSR CHKZOC 3910 CPX #$37 3920 BCC A80 3930 JSR TERRB 3940 LDA TRNCOD 3950 CMP #$BF 3960 BEQ A77 3970 A80 LDA ZOC 3980 CMP #$02 3990 BCC Z81 4000 INC RFR 4010 A77 INC RFR 4020 LDA RFR 4030 CMP ACCLO 4040 BCC Z84 4050 A12 LSR CSTRNG,X 4060 BNE A50 4070 JMP DEAD 4080 A50 RTS 4090 Z84 LDA RANDOM 4100 AND #$02 4110 TAY 4120 JMP LOOP90 4130 Z81 LDY HOMEDR 4140 LDA LONG 4150 CPY #$01 4160 BNE Z85 4170 CMP #$FF 4180 BNE LOOP91 4190 INC MSTRNG,X Russian replacements 4200 INC MSTRNG,X 4210 RTS 4220 Z85 CMP #$2E 4230 BNE LOOP91 4240 RTS 4250 ; 4260 ;routine to check for zone of control 4270 ; 4280 CHKZOC LDA #$00 4290 STA ZOC 4300 LDA #$40 4310 CPX #$37 4320 BCS A70 4330 LDA #$C0 4340 A70 STA TEMPR 4350 JSR TERRB 4360 BNE A74 4370 LDA TRNCOD 4380 AND #$C0 4390 CMP TEMPR 4400 BEQ A71 4410 LDA CORPSX,X 4420 CMP LONG 4430 BNE A79 4440 LDA CORPSY,X 4450 CMP LAT 4460 BEQ A74 4470 A79 RTS 4480 A71 LDA #$02 4490 STA ZOC 4500 RTS 4510 A74 LDX #$07 4520 LOOPQ LDY JSTP+16,X 4530 LDA LONG 4540 CLC 4550 ADC XINC,Y 4560 STA LONG 4570 LDA LAT 4580 CLC 4590 ADC YINC,Y 4600 STA LAT 4610 JSR TERRB 4620 BNE A75 4630 LDA TRNCOD 4640 AND #$C0 4650 CMP TEMPR 4660 BNE A75 4670 TXA 4680 AND #$01 4690 CLC 4700 ADC #$01 4710 ADC ZOC 4720 STA ZOC 4730 A75 DEX 4740 BPL LOOPQ 4750 DEC LAT 4760 DEC LONG 4770 LDX ARMY 4780 RTS 4790 ; 4800 ; 4810 DEAD LDA #$00 4820 STA MSTRNG,X 4830 STA CSTRNG,X 4840 STA HMORDS,X 4850 LDA #$FF 4860 STA EXEC,X 4870 STA ARRIVE,X 4880 STX CORPS 4890 LDA CORPSX,X 4900 STA CHUNKX 4910 LDA CORPSY,X 4920 STA CHUNKY 4930 JSR SWITCH 4940 RTS 4950 ; 4960 ;Subroutine BRKCHK evaluates whether a unit under attack breaks 4970 ; 4980 BRKCHK CPX #$37 4990 BCS WEAKLG 5000 LDA CORPT,X 5010 AND #$F0 5020 BNE WEAKLG 5030 LDA MSTRNG,X 5040 LSR A 5050 JMP Y40 5060 WEAKLG LDA MSTRNG,X 5070 LSR A 5080 LSR A 5090 LSR A 5100 STA TEMPR 5110 LDA MSTRNG,X 5120 SEC 5130 SBC TEMPR 5140 Y40 CMP CSTRNG,X 5150 BCC A30 5160 LDA #$FF 5170 STA EXEC,X 5180 LDA #$00 5190 STA HMORDS,X 5200 A30 RTS 5210 ; 5220 .END 10 ;EFT VERSION 1.8D (DATA) 11/30/81 COPYRIGHT CHRIS CRAWFORD 1981 20 *=$5400 30 CORPSX .BYTE 0,40,40,40,40,40,41,40,41,41,41 40 .BYTE 42,42,42,42,43,43,43,41,40,40,41,41 50 .BYTE 42,42,42,40,41,42,41,42,42,43,41,42 60 .BYTE 43,30,30,31,33,35,37,35,36,36,45,45 70 .BYTE 38,45,31,45,45,32,45,45 80 ;RUSSIAN 90 .BYTE 29,27,24,23 0100 .BYTE 20,15,0,0,0,0,0,0,0,0,0,0 0110 .BYTE 21,21,30,30,39,38,23,19,34,34,31,27 0120 .BYTE 33,41,40,39,42,39,39,39,39,39,37,39 0130 .BYTE 39,39,40,41,41,39,36,34,32,35,30,28 0140 .BYTE 25,29,32,33,26,21,29,0,28,21,21,21 0150 .BYTE 20,20,12,0,0,0,0,0,0,0,21,25 0160 .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 0170 .BYTE 0,0,0,0,38,21,12,20,21,20,15,21,20,19 0180 CORPSY .BYTE 0,20,19,18,17,16,20,19,18,17,16 0190 .BYTE 20,19,18,17,19,18,17,23,22,21,21,22 0200 .BYTE 22,23,24,15,14,13,15,14,12,13,15,16 0210 .BYTE 16,2,3,4,6,7,8,38,37,38,20,15,8 0220 .BYTE 16,1,20,19,1,17,18 0230 ;RUSSIAN 0240 .BYTE 32,31,38,38,38,38 0250 .BYTE 20,8,18,10,14,33,11,15,20,10 0260 .BYTE 28,27,14,13,28,28,31,24,22,21,34,6 0270 .BYTE 37,24,23,23,25,20,22,18,17,21,20,19 0280 .BYTE 16,15,14,13,12,11,9,8,6,9,4,2,6 0290 .BYTE 14,22,36,23,8,33,28,30,20,28,33,27 0300 .BYTE 30,8,10,32,11,25,12,23,13,29,30,31 0310 .BYTE 15,27,17,25,11,23,19,21,33,28,13,26 0320 .BYTE 10,29,35,27,15,30,22,8,13,14,28 0330 .BYTE 3,3,3,2 0340 MSTRNG .BYTE 0,203,205,192,199,184,136,127,150 0350 .BYTE 129,136,109,72,70,81,131,102,53 0360 .BYTE 198,194,129,123,101,104,112,120 0370 .BYTE 202,195,191,72,140,142,119,111 0380 .BYTE 122,77,97,96,92,125,131,106 0390 .BYTE 112,104,101,210,97,98,95,52 0400 .BYTE 98,96,55,104,101 0410 ;RUSSIAN 0420 .BYTE 100,103,110 0430 .BYTE 101,92,103,105,107,111,88,117,84 0440 .BYTE 109,89,105,93 0450 .BYTE 62,104,101,67,104,84,127,112 0460 .BYTE 111,91,79,69,108,118,137,70 0470 .BYTE 85,130,91,131,71,86,75,90 0480 .BYTE 123,124,151,128,88,77,79,80 0490 .BYTE 126,79,91,84,72,86,76,99 0500 .BYTE 67,78,121,114,105,122,127,129 0510 .BYTE 105,111,112,127,119,89,108 0520 .BYTE 113,105,94,103,97,108,110,111 0530 .BYTE 96,109,112,95,93,114,103,107 0540 .BYTE 105,92,109,101,106,95,99,101 0550 .BYTE 118,106,112,104,185,108,94,102 0560 .BYTE 98 0570 CSTRNG *=*+159 0580 SWAP .BYTE 0,126,126,126,126,126,125,125,125 0590 .BYTE 125,125,125,125,125,125,125,125 0600 .BYTE 125,126,126,125,125,125,125,125 0610 .BYTE 125,126,126,126,126,125,125,125 0620 .BYTE 125,125,125,125,125,125,125,125 0630 .BYTE 125,125,125,125,126,125,126,125 0640 .BYTE 125,125,125,125,125,126 0650 ;RUSSIAN 0660 .BYTE 253,253 0670 .BYTE 253,253,253,253,253,253,253,253 0680 .BYTE 254,254,254,254,254,254 0690 .BYTE 254,253,253,254,253,254,253,253 0700 .BYTE 253,254,253,253,253,253,253,254 0710 .BYTE 254,253,253,253,254,254,254,254 0720 .BYTE 253,253,253,253,254,254,254,254 0730 .BYTE 253,254,254,254,253,253,253,253 0740 .BYTE 253,253,253,253,253,253,253,253 0750 .BYTE 253,253,253,253,253,253,253,253 0760 .BYTE 253,253,254,253,253,253,253,253 0770 .BYTE 253,253,253,253,254,254,254,253 0780 .BYTE 254,253,254,254,253,254,253,253 0790 .BYTE 253,253,253,253,253,253,253,253 0800 ARRIVE .BYTE 255,0,255,0,0,0,0,0,0 0810 .BYTE 0,0,255,255,255,255,255,255 0820 .BYTE 255,0,0,0,0,0,0,0 0830 .BYTE 0,0,0,0,255,0,0,0 0840 .BYTE 0,255,255,0,0,0,0,0 0850 .BYTE 0,0,0,255,2,255,2 0860 .BYTE 5,6,9,10,11,20,24 0870 ;RUSSIAN 0880 .BYTE 4,5,7,9,11,13,7,12,8 0890 .BYTE 10,10,14,15,16,18,7 0900 .BYTE 0,0,0,0,0,0,0,0 0910 .BYTE 0,0,0,0,0,0,0,0 0920 .BYTE 0,0,0,0,0,0,0,0 0930 .BYTE 0,0,0,0,0,0,0,0 0940 .BYTE 0,0,0,0,1,1,1,1 0950 .BYTE 1,2,2,2,3,3,4,4 0960 .BYTE 5,5,6,6,7,8,8,8 0970 .BYTE 9,9,5,5,2,9,10,10 0980 .BYTE 6,11,5,17,2,11,20,21 0990 .BYTE 22,23,24,26,28,30,2,3 1000 .BYTE 3,3,3,6,6,4,4,4 1010 WORDS .BYTE " SS " 1020 .BYTE "FINNISH RUMANIAN" 1030 .BYTE "ITALIAN HUNGARAN" 1040 .BYTE "MOUNTAINGUARDS " 1050 .BYTE "INFANTRYTANK " 1060 .BYTE "CAVALRY PANZER " 1070 .BYTE "MILITIA SHOCK " 1080 .BYTE "PARATRP PZRGRNDR" 1090 .BYTE " JANUARY " 1100 .BYTE "FEBRUARYMARCH " 1110 .BYTE "APRIL MAY " 1120 .BYTE "JUNE JULY " 1130 .BYTE "AUGUST SEPTEMBR" 1140 .BYTE "OCTOBER NOVEMBER" 1150 .BYTE "DECEMBERCORPS " 1160 .BYTE "ARMY MUSTER " 1170 .BYTE "COMBAT STRENGTH" 1180 CORPT .BYTE 0,3,3,3,3,3,0,0 1190 .BYTE 0,0,0,0,0,0,0,0 1200 .BYTE 0,$40,3,3,0,0,0,0 1210 .BYTE 0,0,3,3,3,3,0,0 1220 .BYTE 0,0,0,0,$30,$30,$30,0 1230 .BYTE 0,0,$20,$20,$20,3,0,$53 1240 .BYTE 0,$30,0,0,$40,0,7 1250 ;RUSSIAN 1260 .BYTE 4,4,0,0,0,0,0,0,0 1270 .BYTE 0,1,1,1,1,1,2 1280 .BYTE 1,0,0,2,0,1,0,0 1290 .BYTE 0,1,4,0,4,0,0,1 1300 .BYTE 1,0,0,0,1,1,2,2 1310 .BYTE 0,0,0,0,1,1,1,2 1320 .BYTE 0,1,2,2,0,4,0,4 1330 .BYTE 0,0,0,0,0,0,0,0 1340 .BYTE 0,0,0,0,0,0,0,0 1350 .BYTE 0,0,$72,0,$70,$70,$70,$70 1360 .BYTE 0,0,0,0,$72,1,$71,$70 1370 .BYTE 1,$70,1,1,0,0,0,0 1380 .BYTE 0,0,0,4,4,4,4,4 1390 CORPNO .BYTE 0,24,39,46,47,57,5,6 1400 .BYTE 7,8,9,12,13,20,42,43 1410 .BYTE 53,3,41,56,1,2,10,26 1420 .BYTE 28,38,3,14,48,52,49,4 1430 .BYTE 17,29,44,55,1,2,4,11 1440 .BYTE 30,54,2,4,6,40,27,1 1450 .BYTE 23,5,34,35,4,51,50 1460 ;RUSSIAN 1470 .BYTE 7,11,41,42,43,44,45,46 1480 .BYTE 47,48,9,13,14,15,16,7 1490 .BYTE 2,19,18,1,27,10,22,21 1500 .BYTE 13,6,9,2,1,8,11,1 1510 .BYTE 7,3,4,10,5,8,3,6 1520 .BYTE 5,6,12,26,3,4,11,5 1530 .BYTE 9,12,4,2,7,2,14,4 1540 .BYTE 15,16,20,6,24,40,29,30 1550 .BYTE 31,32,33,37,43,49,50,52 1560 .BYTE 54,55,1,34,1,2,3,4 1570 .BYTE 39,59,60,61,2,1,1,5 1580 .BYTE 2,6,3,4,38,36,35,28 1590 .BYTE 25,23,17,8,10,3,5,6 1600 ;HERE COME NUMBER CODES 1610 HDIGIT .BYTE 0,0,0,0,0,0,0,0 1620 .BYTE 0,0,0,0,0,0,0,0 1630 .BYTE 0,0,0,0,0,0,0,0 1640 .BYTE 0,0,0,0,0,0,0,0 1650 .BYTE 0,0,0,0,0,0,0,0 1660 .BYTE 0,0,0,0,0,0,0,0 1670 .BYTE 0,0,0,0,0,0,0,0 1680 .BYTE 0,0,0,0,0,0,0,0 1690 .BYTE 0,0,0,0,0,0,0,0 1700 .BYTE 0,0,0,0,0,0,0,0 1710 .BYTE 0,0,0,0,0,0,0,0 1720 .BYTE 0,0,0,0,0,0,0,0 1730 .BYTE 0,0,0,0,1,1,1,1 1740 .BYTE 1,1,1,1,1,1,1,1 1750 .BYTE 1,1,1,1,1,1,1,1 1760 .BYTE 1,1,1,1,1,1,1,1 1770 .BYTE 1,1,1,1,1,1,1,1 1780 .BYTE 1,1,1,1,1,1,1,1 1790 .BYTE 1,1,1,1,1,1,1,1 1800 .BYTE 1,1,1,1,1,1,1,1 1810 .BYTE 1,1,1,1,1,1,1,1 1820 .BYTE 1,1,1,1,1,1,1,1 1830 .BYTE 1,1,1,1,1,1,1,1 1840 .BYTE 1,1,1,1,1,1,1,1 1850 .BYTE 1,1,1,1,1,1,1,1 1860 .BYTE 2,2,2,2,2,2,2,2 1870 .BYTE 2,2,2,2,2,2,2,2 1880 .BYTE 2,2,2,2,2,2,2,2 1890 .BYTE 2,2,2,2,2,2,2,2 1900 .BYTE 2,2,2,2,2,2,2,2 1910 .BYTE 2,2,2,2,2,2,2,2 1920 .BYTE 2,2,2,2,2,2,2,2 1930 TDIGIT .BYTE 0,0,0,0,0,0,0,0,0,0 1940 .BYTE 1,1,1,1,1,1,1,1,1,1 1950 .BYTE 2,2,2,2,2,2,2,2,2,2 1960 .BYTE 3,3,3,3,3,3,3,3,3,3 1970 .BYTE 4,4,4,4,4,4,4,4,4,4 1980 .BYTE 5,5,5,5,5,5,5,5,5,5 1990 .BYTE 6,6,6,6,6,6,6,6,6,6 2000 .BYTE 7,7,7,7,7,7,7,7,7,7 2010 .BYTE 8,8,8,8,8,8,8,8,8,8 2020 .BYTE 9,9,9,9,9,9,9,9,9,9 2030 .BYTE 0,0,0,0,0,0,0,0,0,0 2040 .BYTE 1,1,1,1,1,1,1,1,1,1 2050 .BYTE 2,2,2,2,2,2,2,2,2,2 2060 .BYTE 3,3,3,3,3,3,3,3,3,3 2070 .BYTE 4,4,4,4,4,4,4,4,4,4 2080 .BYTE 5,5,5,5,5,5,5,5,5,5 2090 .BYTE 6,6,6,6,6,6,6,6,6,6 2100 .BYTE 7,7,7,7,7,7,7,7,7,7 2110 .BYTE 8,8,8,8,8,8,8,8,8,8 2120 .BYTE 9,9,9,9,9,9,9,9,9,9 2130 .BYTE 0,0,0,0,0,0,0,0,0,0 2140 .BYTE 1,1,1,1,1,1,1,1,1,1 2150 .BYTE 2,2,2,2,2,2,2,2,2,2 2160 .BYTE 3,3,3,3,3,3,3,3,3,3 2170 .BYTE 4,4,4,4,4,4,4,4,4,4 2180 .BYTE 5,5,5,5,5,5 2190 ODIGIT .BYTE 0,1,2,3,4,5,6,7,8,9 2200 .BYTE 0,1,2,3,4,5,6,7,8,9 2210 .BYTE 0,1,2,3,4,5,6,7,8,9 2220 .BYTE 0,1,2,3,4,5,6,7,8,9 2230 .BYTE 0,1,2,3,4,5,6,7,8,9 2240 .BYTE 0,1,2,3,4,5,6,7,8,9 2250 .BYTE 0,1,2,3,4,5,6,7,8,9 2260 .BYTE 0,1,2,3,4,5,6,7,8,9 2270 .BYTE 0,1,2,3,4,5,6,7,8,9 2280 .BYTE 0,1,2,3,4,5,6,7,8,9 2290 .BYTE 0,1,2,3,4,5,6,7,8,9 2300 .BYTE 0,1,2,3,4,5,6,7,8,9 2310 .BYTE 0,1,2,3,4,5,6,7,8,9 2320 .BYTE 0,1,2,3,4,5,6,7,8,9 2330 .BYTE 0,1,2,3,4,5,6,7,8,9 2340 .BYTE 0,1,2,3,4,5,6,7,8,9 2350 .BYTE 0,1,2,3,4,5,6,7,8,9 2360 .BYTE 0,1,2,3,4,5,6,7,8,9 2370 .BYTE 0,1,2,3,4,5,6,7,8,9 2380 .BYTE 0,1,2,3,4,5,6,7,8,9 2390 .BYTE 0,1,2,3,4,5,6,7,8,9 2400 .BYTE 0,1,2,3,4,5,6,7,8,9 2410 .BYTE 0,1,2,3,4,5,6,7,8,9 2420 .BYTE 0,1,2,3,4,5,6,7,8,9 2430 .BYTE 0,1,2,3,4,5,6,7,8,9 2440 .BYTE 0,1,2,3,4,5 2450 TXTTBL .BYTE "PLEASE ENTER YOU" 2460 .BYTE "R ORDERS NOW " 2470 .BYTE " GAME O" 2480 .BYTE "VER " 2490 .BYTE "FIGURING MOVE; N" 2500 .BYTE "O ORDERS ALLOWED" 2510 MONLEN .BYTE 0,31,28,31,30,31 2520 .BYTE 30,31,31,30,31,30,31 2530 HMORDS *=*+159 2540 WHORDS *=*+318 2550 BEEPTB .BYTE 30,40,50,60 2560 ERRMSG .BYTE " THAT IS A RU" 2570 .BYTE "SSIAN UNIT! " 2580 .BYTE " ONLY 8 ORDERS" 2590 .BYTE " ARE ALLOWED! " 2600 .BYTE " PLEASE WAIT FO" 2610 .BYTE "R MALTAKREUZE! " 2620 .BYTE " NO DIAGONAL M" 2630 .BYTE "OVES ALLOWED! " 2640 XOFF .BYTE 0,8,0,$F8 2650 YOFF .BYTE $F8,0,8,0 2660 MASKO .BYTE 3,$0C,$30,$C0 2670 XADD .BYTE 0,1,0,$FF 2680 YADD .BYTE $FF,0,1,0 2690 TRTAB .BYTE 0,$12,$12,$12,$D2,$D8 2700 .BYTE $D6,$C4,$D4,$C2,$12,$12,$12 2710 MLTKRZ .BYTE $24,$24,$E7,0,0,$E7,$24,$24 2720 *=$6000 2730 ;First comes 1024 bytes of new character set 2740 *=*+1024 2750 ; 2760 ;The display list goes here; it is 49 bytes long. 2770 ; 2780 .BYTE $70,$70,$70,$C6,$E0,$64,$90,$90,$F7 2790 .BYTE $FE,$64,$F7,$2E,$65,$F7,$5E,$65 2800 .BYTE $F7,$8E,$65,$F7,$BE,$65,$F7,$EE 2810 .BYTE $65,$F7,$1E,$66,$F7,$4E,$66,$F7 2820 .BYTE $7E,$66,$57,$AE,$66,$90,$C2,$50 2830 .BYTE $64,$02,$90,$02,$90,$41,$00,$64 2840 ARRTAB .BYTE $10,$38,$54,$92,$10,$10,$10,$10 2850 .BYTE 8,4,2,$FF,2,4,8,0 2860 .BYTE $10,$10,$10,$10,$92,$54,$38,$10 2870 .BYTE $10,$20,$40,$FF,$40,$20,$10,0 2880 ; 2890 *=$6450 2900 ;This next area is reserved for the text window 2910 TXTWDW *=$64FF 2920 ; 2930 ;The map data goes here. 2940 ; 2950 .BYTE 127,127,127,127,127,127,127,127,127 2960 .BYTE 127,127,127,127,127,127,127,127 2970 .BYTE 127,127,127,127,127,127,127,127 2980 .BYTE 127,127,127,127,127,127,127,127 2990 .BYTE 127,127,127,127,127,127,127,127 3000 .BYTE 127,127,127,127,127,127,127,127 3010 .BYTE 127,191,191,191,169,0,0,0 3020 .BYTE 0,0,0,0,0,180,191,191 3030 .BYTE 170,0,0,0,0,0,0,0 3040 .BYTE 0,0,0,0,0,0,0,0 3050 .BYTE 0,0,0,0,0,0,0,0 3060 .BYTE 0,0,0,0,0,0,0,127 3070 .BYTE 127,191,191,191,175,178,0,0 3080 .BYTE 0,181,182,184,183,182,179,187 3090 .BYTE 176,0,0,0,0,0,0,0 3100 .BYTE 0,0,0,0,0,0,0,0 3110 .BYTE 0,0,0,0,0,0,0,0 3120 .BYTE 0,0,0,0,0,0,0,127 3130 .BYTE 127,191,191,191,191,175,184,183 3140 .BYTE 185,191,191,177,176,71,157,155 3150 .BYTE 0,0,0,0,0,0,0,0 3160 .BYTE 0,0,0,0,0,0,0,0 3170 .BYTE 0,0,0,0,0,0,0,0 3180 .BYTE 0,0,0,0,0,0,0,127 3190 .BYTE 127,191,191,191,191,191,177,172 3200 .BYTE 173,174,187,188,164,141,148,140 3210 .BYTE 0,0,0,0,0,0,0,0 3220 .BYTE 157,165,0,156,160,162,166,0 3230 .BYTE 0,0,0,0,0,0,0,0 3240 .BYTE 0,0,0,0,0,0,0,127 3250 .BYTE 127,191,191,191,191,191,171,0 3260 .BYTE 0,0,186,178,152,142,149,1 3270 .BYTE 5,0,0,0,0,0,0,0 3280 .BYTE 148,145,161,154,0,0,146,159 3290 .BYTE 165,0,0,0,0,156,164,0 3300 .BYTE 0,0,0,0,0,0,0,127 3310 .BYTE 127,191,191,191,191,191,170,0 3320 .BYTE 0,0,180,170,147,140,150,2 3330 .BYTE 6,0,0,0,0,0,0,0 3340 .BYTE 151,0,0,0,0,0,0,156 3350 .BYTE 168,72,0,157,161,153,145,160 3360 .BYTE 165,0,0,0,0,0,0,127 3370 .BYTE 127,191,191,191,191,191,175,178 3380 .BYTE 0,0,0,176,149,139,151,3 3390 .BYTE 1,0,0,0,0,0,0,0 3400 .BYTE 0,0,0,0,0,0,0,149 3410 .BYTE 145,160,159,155,0,0,0,73 3420 .BYTE 146,166,0,0,0,0,0,127 3430 .BYTE 127,191,191,191,191,191,191,169 3440 .BYTE 0,0,0,0,0,0,152,4 3450 .BYTE 3,0,0,0,0,0,0,0 3460 .BYTE 0,0,0,0,0,0,157,154 3470 .BYTE 0,0,0,0,0,0,0,0 3480 .BYTE 0,149,0,0,0,0,0,127 3490 .BYTE 127,191,191,177,172,191,191,170 3500 .BYTE 72,0,0,0,0,0,148,0 3510 .BYTE 2,0,0,0,0,0,0,0 3520 .BYTE 2,0,0,0,0,0,150,0 3530 .BYTE 0,0,0,0,0,0,0,0 3540 .BYTE 0,144,162,159,167,0,0,127 3550 .BYTE 127,191,191,170,0,179,173,188 3560 .BYTE 159,160,165,0,0,0,0,0 3570 .BYTE 0,0,0,0,0,0,0,0 3580 .BYTE 1,0,0,0,0,0,151,0 3590 .BYTE 0,0,0,0,0,0,0,0 3600 .BYTE 0,0,0,156,153,0,0,127 3610 .BYTE 127,191,191,169,0,0,0,0 3620 .BYTE 0,0,143,164,0,0,0,0 3630 .BYTE 0,157,155,0,0,0,73,0 3640 .BYTE 0,0,74,0,0,156,153,0 3650 .BYTE 0,0,0,0,0,0,0,0 3660 .BYTE 0,0,0,149,0,0,0,127 3670 .BYTE 127,191,191,171,0,0,0,0 3680 .BYTE 0,0,0,144,161,166,0,0 3690 .BYTE 156,154,0,0,0,0,0,3 3700 .BYTE 6,0,0,0,0,152,0,0 3710 .BYTE 0,0,0,0,0,0,0,0 3720 .BYTE 0,0,0,147,0,0,0,127 3730 .BYTE 127,191,191,175,178,0,0,0 3740 .BYTE 0,0,0,0,0,145,162,163 3750 .BYTE 153,0,0,0,2,151,4,1 3760 .BYTE 2,158,163,161,159,155,0,0 3770 .BYTE 0,0,0,0,0,0,0,0 3780 .BYTE 0,0,0,150,0,0,0,127 3790 .BYTE 127,191,191,191,170,0,0,0 3800 .BYTE 0,0,0,0,0,0,0,0 3810 .BYTE 0,0,0,156,162,153,0,3 3820 .BYTE 4,148,0,0,0,0,0,0 3830 .BYTE 0,0,0,0,0,0,0,0 3840 .BYTE 0,0,156,154,0,0,0,127 3850 .BYTE 127,191,191,177,188,160,159,161 3860 .BYTE 164,0,0,0,2,6,5,0 3870 .BYTE 0,157,163,154,71,0,1,6 3880 .BYTE 0,147,0,0,152,0,0,0 3890 .BYTE 0,0,0,0,0,0,0,0 3900 .BYTE 0,0,151,74,0,0,0,127 3910 .BYTE 127,191,177,176,0,0,0,0 3920 .BYTE 145,162,0,1,4,3,1,0 3930 .BYTE 158,155,0,0,0,0,0,0 3940 .BYTE 0,0,0,0,151,0,0,0 3950 .BYTE 0,0,0,0,0,0,0,0 3960 .BYTE 0,0,148,0,0,0,0,127 3970 .BYTE 127,173,176,0,0,0,0,0 3980 .BYTE 0,0,0,2,6,74,0,140 3990 .BYTE 150,139,0,0,0,0,0,0 4000 .BYTE 0,0,0,0,143,162,167,0 4010 .BYTE 0,0,0,0,0,0,0,0 4020 .BYTE 0,158,155,0,0,0,0,127 4030 .BYTE 127,0,0,0,0,0,0,0 4040 .BYTE 0,1,3,5,0,0,0,142 4050 .BYTE 144,165,141,0,0,0,0,0 4060 .BYTE 0,71,0,0,0,0,150,73 4070 .BYTE 0,0,0,0,0,0,0,0 4080 .BYTE 0,152,0,0,0,0,0,127 4090 .BYTE 127,0,0,0,0,0,0,0 4100 .BYTE 2,6,0,0,0,0,141,139 4110 .BYTE 142,146,167,0,0,0,0,0 4120 .BYTE 0,0,0,0,0,0,145,165 4130 .BYTE 0,0,0,0,0,0,0,0 4140 .BYTE 0,150,0,0,0,0,0,127 4150 .BYTE 127,166,73,0,0,0,0,0 4160 .BYTE 5,4,0,0,139,140,142,141 4170 .BYTE 140,0,152,0,0,0,0,0 4180 .BYTE 0,0,0,0,0,0,0,149 4190 .BYTE 0,0,0,0,0,0,0,0 4200 .BYTE 0,149,0,0,0,0,0,127 4210 .BYTE 127,146,165,0,0,0,0,0 4220 .BYTE 3,1,0,0,141,159,163,165 4230 .BYTE 142,139,148,0,0,0,0,0 4240 .BYTE 0,0,150,0,0,0,0,144 4250 .BYTE 161,164,0,0,0,0,0,0 4260 .BYTE 0,151,0,0,0,0,0,127 4270 .BYTE 127,0,143,167,0,0,0,3 4280 .BYTE 4,6,0,139,140,142,141,145 4290 .BYTE 160,166,151,0,0,0,0,0 4300 .BYTE 0,0,145,166,0,0,0,0 4310 .BYTE 0,146,166,0,0,0,0,0 4320 .BYTE 0,148,0,0,0,0,0,127 4330 .BYTE 127,0,0,149,0,0,0,2 4340 .BYTE 5,139,142,141,139,140,139,142 4350 .BYTE 140,146,168,0,0,0,0,0 4360 .BYTE 0,0,0,151,0,0,0,0 4370 .BYTE 0,0,143,163,159,161,160,166 4380 .BYTE 0,152,0,0,0,0,0,127 4390 .BYTE 127,0,156,154,0,0,0,0 4400 .BYTE 0,140,139,141,142,140,0,0 4410 .BYTE 0,139,148,0,0,0,0,0 4420 .BYTE 0,0,74,148,0,0,0,0 4430 .BYTE 0,0,0,0,0,0,0,147 4440 .BYTE 71,143,159,160,162,165,0,127 4450 .BYTE 127,153,151,0,0,0,0,0 4460 .BYTE 0,0,142,0,0,0,0,0 4470 .BYTE 0,71,149,0,0,0,0,0 4480 .BYTE 0,0,0,144,165,0,0,0 4490 .BYTE 0,0,0,0,0,0,0,149 4500 .BYTE 0,0,0,0,0,144,166,127 4510 .BYTE 127,1,6,0,0,0,0,0 4520 .BYTE 0,0,0,0,0,0,0,0 4530 .BYTE 0,0,143,156,161,0,0,0 4540 .BYTE 0,0,0,0,146,156,155,157 4550 .BYTE 154,156,160,0,0,0,0,148 4560 .BYTE 0,0,0,0,0,0,146,127 4570 .BYTE 127,2,5,3,4,0,0,0 4580 .BYTE 0,0,0,0,0,0,0,0 4590 .BYTE 0,0,0,0,145,155,158,0 4600 .BYTE 0,0,0,0,0,0,0,0 4610 .BYTE 0,0,145,157,158,0,152,150 4620 .BYTE 0,0,0,0,0,0,0,127 4630 .BYTE 127,0,0,1,5,6,3,0 4640 .BYTE 0,156,161,0,0,0,156,159 4650 .BYTE 0,0,0,0,0,0,144,154 4660 .BYTE 160,0,0,0,0,0,0,0 4670 .BYTE 0,0,0,153,162,155,151,0 4680 .BYTE 0,0,0,0,0,0,0,127 4690 .BYTE 127,0,0,0,0,4,3,1 4700 .BYTE 5,0,145,159,0,0,0,146 4710 .BYTE 157,158,0,0,0,0,0,0 4720 .BYTE 146,157,159,0,0,0,0,0 4730 .BYTE 0,0,152,151,0,0,0,0 4740 .BYTE 0,0,0,0,0,0,0,127 4750 .BYTE 127,0,0,0,0,0,2,4 4760 .BYTE 6,0,0,143,155,156,154,160 4770 .BYTE 0,143,154,161,0,0,0,0 4780 .BYTE 0,0,143,158,0,0,0,0 4790 .BYTE 0,153,150,0,0,0,0,0 4800 .BYTE 0,0,0,0,0,0,0,127 4810 .BYTE 127,0,0,0,0,0,0,1 4820 .BYTE 3,5,0,0,0,0,0,144 4830 .BYTE 158,0,0,145,160,0,0,0 4840 .BYTE 0,0,72,147,0,0,0,176 4850 .BYTE 165,188,73,0,0,0,0,0 4860 .BYTE 0,0,0,0,0,0,0,127 4870 .BYTE 127,0,0,0,0,0,0,0 4880 .BYTE 2,6,4,0,0,0,0,0 4890 .BYTE 146,161,0,0,144,159,0,0 4900 .BYTE 0,0,153,150,0,177,166,170 4910 .BYTE 178,174,0,0,0,0,0,0 4920 .BYTE 0,0,0,0,0,0,0,127 4930 .BYTE 127,0,0,0,0,0,0,0 4940 .BYTE 0,5,1,6,0,160,0,0 4950 .BYTE 0,143,159,0,0,146,158,0 4960 .BYTE 0,0,149,0,175,171,191,179 4970 .BYTE 173,0,0,0,0,0,0,0 4980 .BYTE 0,0,0,0,0,0,0,127 4990 .BYTE 127,0,0,0,0,0,0,0 5000 .BYTE 0,1,2,4,3,144,161,0 5010 .BYTE 0,0,145,160,73,0,147,0 5020 .BYTE 0,152,151,0,164,191,191,168 5030 .BYTE 180,0,0,0,0,0,0,0 5040 .BYTE 0,0,0,0,0,0,0,127 5050 .BYTE 127,0,0,0,0,0,0,0 5060 .BYTE 0,5,3,6,2,1,143,159 5070 .BYTE 0,0,0,146,186,165,187,166 5080 .BYTE 167,188,182,172,191,191,191,178 5090 .BYTE 174,0,74,152,154,157,156,159 5100 .BYTE 0,0,0,0,0,0,0,127 5110 .BYTE 127,0,0,4,5,1,5,2 5120 .BYTE 3,6,1,4,5,6,2,145 5130 .BYTE 158,0,0,176,170,191,191,191 5140 .BYTE 178,173,183,184,184,185,163,181 5150 .BYTE 153,157,155,150,0,0,0,148 5160 .BYTE 0,0,0,0,0,0,0,127 5170 .BYTE 127,0,0,5,3,6,4,1 5180 .BYTE 4,2,0,3,4,1,6,0 5190 .BYTE 146,186,167,171,191,191,191,191 5200 .BYTE 168,180,0,0,176,170,191,169 5210 .BYTE 187,166,167,180,0,0,0,0 5220 .BYTE 0,0,0,0,0,0,0,127 5230 .BYTE 127,0,0,0,0,0,0,0 5240 .BYTE 0,0,0,0,0,0,0,0 5250 .BYTE 177,172,191,191,191,191,191,191 5260 .BYTE 191,169,181,175,171,191,191,191 5270 .BYTE 191,191,191,169,165,181,5,4 5280 .BYTE 2,3,6,1,6,2,1,127 5290 .BYTE 127,0,0,0,0,0,0,0 5300 .BYTE 0,0,0,0,0,0,0,0 5310 .BYTE 164,191,191,191,191,191,191,191 5320 .BYTE 191,191,168,172,191,191,191,191 5330 .BYTE 191,191,191,191,191,168,166,167 5340 .BYTE 181,1,2,3,4,3,3,127 5350 .BYTE 127,127,127,127,127,127,127,127 5360 .BYTE 127,127,127,127,127,127,127,127 5370 .BYTE 127,127,127,127,127,127,127,127 5380 .BYTE 127,127,127,127,127,127,127,127 5390 .BYTE 127,127,127,127,127,127,127,127 5400 .BYTE 127,127,127,127,127,127,127,127,127 5410 STKTAB .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,1 5420 .BYTE $FF,$FF,$FF,3,$FF,2,0,$FF 5430 SSNCOD .BYTE 40,40,40,20,0,0,0,0,0,20,40,40 5440 TRNTAB .BYTE 6,12,8,0,0,18,14,8,20,128 5450 .BYTE 4,8,6,0,0,18,13,6,16,128 5460 .BYTE 24,30,24,0,0,30,30,26,28,128 5470 .BYTE 30,30,30,0,0,30,30,30,30,128 5480 .BYTE 10,16,10,12,12,24,28,12,24,128 5490 .BYTE 6,10,8,8,8,24,28,8,20,128 5500 BHX1 .BYTE 40,39,38,36,35,34,22,15,15,14 5510 .BYTE 40,39,38,35,35,34,22,15,14,14,19,19 5520 BHY1 .BYTE 35,35,35,33,36,36,4,7,7,8 5530 .BYTE 36,36,36,33,37,37,3,6,7,7,4,3 5540 BHX2 .BYTE 40,39,38,35,35,34,22,15,14,14 5550 .BYTE 40,39,38,36,35,34,22,15,15,14,19,19 5560 BHY2 .BYTE 36,36,36,33,37,37,3,6,7,7 5570 .BYTE 35,35,35,33,36,36,4,7,7,8,3,4 5580 EXEC *=*+159 5590 .END 10 ;EFT VERSION 1.8I (INTERRUPT) 11/30/81 COPYRIGHT CHRIS CRAWFORD 1981 20 ; 30 ;Page zero RAM 40 ; 50 RTCLKL=$14 60 ATRACT=$4D 70 DRKMSK=$4E 80 COLRSH=$4F 90 *=$B0 0100 ; 0110 ;These locations are used by the interrupt service routine 0120 ; 0130 DLSTPT *=*+2 Zero page pointer to display list 0140 MAPLO *=*+1 0150 MAPHI *=*+1 0160 CORPS *=*+1 number of unit under window 0170 CURSXL *=*+1 0180 CURSXH *=*+1 0190 CURSYL *=*+1 cursor coordinates on screen (map frame) 0200 CURSYH *=*+1 0210 OFFLO *=*+1 How far to offset new LMS value 0220 OFFHI *=*+1 0230 TEMPI *=*+1 An all-purpose temporary register 0240 CNT1 *=*+1 DLI counter 0250 CNT2 *=*+1 DLI counter for movable map DLI 0260 CHUNKX *=*+1 cursor coordinates (pixel frame) 0270 CHUNKY *=*+1 0280 ; 0290 ;THIS VALUE IS USED BY MAINLINE ROUTINE AND INTERRUPT 0300 ; 0310 TURN=$C9 0320 ; 0330 ;OS locations (see OS manual) 0340 ; 0350 PCOLR0=$02C0 0360 STICK=$0278 0370 CH=$2FC 0380 ; 0390 ;HARDWARE LOCATIONS 0400 ; 0410 HPOSP0=$D000 0420 HPOSP1=$D001 0430 HPOSP2=$D002 0440 HPOSP3=$D003 0450 TRIG0=$D010 0460 TRIG1=$D011 0470 TRIG2=$D012 0480 COLPF0=$D016 0490 COLPF1=$D017 0500 COLPF2=$D018 0510 COLBAK=$D01A 0520 CONSOL=$D01F 0530 AUDF1=$D200 0540 AUDC1=$D201 0550 HSCROLL=$D404 0560 VSCROLL=$D405 0570 WSYNC=$D40A 0580 CHBASE=$D409 0590 SETVBV=$E45C 0600 XITVBV=$E462 0610 ; 0620 ;Page 6 usage 0630 ; 0640 *=$0600 0650 ;first come locations used by the interrupt service routine 0660 XPOSL *=*+1 Horizontal position of 0670 YPOSL *=*+1 Vertical position of 0680 YPOSH *=*+1 upper left corner of screen window 0690 SCY *=*+1 vert position of cursor (player frame) 0700 SHPOS0 *=*+1 shadows player 0 position 0710 TRCOLR *=*+1 0720 EARTH *=*+1 0730 ICELAT *=*+1 0740 SEASN1 *=*+1 0750 SEASN2 *=*+1 0760 SEASN3 *=*+1 0770 DAY *=*+1 0780 MONTH *=*+1 0790 YEAR *=*+1 0800 BUTFLG *=*+1 0810 BUTMSK *=*+1 0820 TYL *=*+1 0830 TYH *=*+1 0840 DELAY *=*+1 acceleration delay on scrolling 0850 TIMSCL *=*+1 frame to scroll in 0860 TEMPLO *=*+1 temporary 0870 TEMPHI *=*+1 0880 BASEX *=*+1 start position for arrow (player frame) 0890 BASEY *=*+1 0900 STEPX *=*+1 intermediate position of arrow 0910 STEPY *=*+1 0920 STPCNT *=*+1 which intermediate steps arrow is on 0930 ORDCNT *=*+1 which order arrow is showing 0940 ORD1 *=*+1 orders record 0950 ORD2 *=*+1 0960 ARRNDX *=*+1 arrow index 0970 HOWMNY *=*+1 how many orders for unit under cursor 0980 KRZX *=*+1 maltakreuze coords (player frame) 0990 KRZY *=*+1 1000 DBTIMR *=*+1 joystick debounce timer 1010 STICKI *=*+1 coded value of stick direction (0-3) 1020 ERRFLG *=*+1 1030 KRZFLG *=*+1 1040 STKFLG *=*+1 1050 HITFLG *=*+1 1060 TXL *=*+1 temporary values---slightly shifted 1070 TXH *=*+1 1080 HANDCP=$68F 1090 ; 1100 *=$5200 1110 PLYR0 *=*+128 1120 PLYR1 *=*+128 1130 PLYR2 *=*+128 1140 PLYR3 *=*+128 1150 CORPSX *=*+159 x-coords of all units (pixel frame) 1160 CORPSY *=*+159 y-coords of all units (pixel frame) 1170 MSTRNG *=*+159 muster strengths 1180 CSTRNG *=*+159 combat strengths 1190 SWAP *=*+159 terrain code underneath unit 1200 ARRIVE *=*+159 turn of arrival 1210 WORDS *=*+272 various words for messages 1220 CORPT *=*+159 codes for unit types 1230 CORPNO *=*+159 ID numbers of units 1240 HDIGIT *=*+256 tables for displaying numbers (hundreds) 1250 TDIGIT *=*+256 tens tables 1260 ODIGIT *=*+256 ones tables 1270 TXTTBL *=*+96 more text 1280 MONLEN *=*+13 table of month lengths 1290 HMORDS *=*+159 how many orders each unit has in queue 1300 WHORDS *=*+159 what the orders are 1310 WHORDH *=*+159 1320 BEEPTB *=*+4 table of beep tones 1330 ERRMSG *=*+128 table of error messages 1340 XOFF *=*+4 offsets for moving maltakreuze 1350 YOFF *=*+4 1360 MASKO *=*+4 mask values for decoding orders 1370 XADD *=*+4 offsets for moving arrow 1380 YADD *=*+4 1390 TRTAB *=*+13 1400 MLTKRZ *=*+8 maltese cross shape 1410 ; 1420 ;RAM from $6000 to $6430 is taken up by 1430 ;character sets and the display list 1440 ; 1450 *=$6431 1460 ARRTAB *=*+32 arrow shapes 1470 *=$6450 1480 TXTWDW *=$6CB1 1490 ; 1500 STKTAB *=*+16 a joystick decoding table 1510 SSNCOD *=*+12 1520 TRNTAB *=*+60 1530 BHX1 *=*+22 1540 BHY1 *=*+22 1550 BHX2 *=*+22 1560 BHY2 *=*+22 1570 EXEC *=*+159 1580 ; 1590 ;everything in here is taken up by the map data 1600 ; 1610 ; 1620 ;This is the vertical blank interrupt routine 1630 ;It reads the joystick and scrolls the screen 1640 ; 1650 *=$7400 1660 LDA TRIG1 check for break button 1670 BNE Z30 no, check next 1680 LDY #62 reset 60 Hertz vector 1690 LDX #233 1700 LDA #7 1710 JSR SETVBV 1720 PLA reset stack 1730 PLA 1740 PLA 1750 JMP $7210 break routine 1760 Z30 LDA HANDCP 1770 BEQ A31 1780 LDA TRIG0 1790 BEQ A31 1800 LDA #$08 1810 STA CONSOL 1820 LDA CONSOL 1830 AND #$04 1840 BNE A31 1850 STA HANDCP 1860 LDA #$30 1870 STA $7B7A my trademark 1880 LDX #$36 1890 LOOPJ LDA MSTRNG,X 1900 STA TEMPI 1910 LSR A 1920 ADC TEMPI 1930 BCC A22 1940 LDA #$FF 1950 A22 STA MSTRNG,X 1960 DEX 1970 BNE LOOPJ 1980 ; 1990 ; 2000 A31 LDA TRIG0 button status 2010 ORA BUTMSK button allowed? 2020 BEQ X17 2030 LDA BUTFLG no button now; previous status 2040 BNE X23 2050 JMP NOBUT 2060 X23 LDA #$58 button just released 2070 STA PCOLR0 2080 LDA #$00 2090 STA BUTFLG 2100 STA KRZFLG 2110 STA AUDC1 2120 LDX #$52 2130 LOOP8 STA TXTWDW+8,X clear text window 2140 DEX 2150 BPL LOOP8 2160 LDA #$08 2170 STA DELAY 2180 CLC 2190 ADC RTCLKL 2200 STA TIMSCL 2210 JSR SWITCH 2220 LDA #$00 2230 STA CORPS 2240 JSR CLRP1 2250 JSR CLRP2 2260 JMP ENDISR 2270 X17 STA ATRACT button is pressed 2280 LDA STICK 2290 AND #$0F 2300 EOR #$0F 2310 BEQ X20 joystick active? 2320 JMP ORDERS yes 2330 X20 STA DBTIMR no, set debounce 2340 STA AUDC1 2350 STA STKFLG 2360 LDA BUTFLG 2370 BNE BUTHLD is this the first button pass 2380 JMP FBUTPS yes 2390 BUTHLD JSR ERRCLR no, clear errors 2400 X61 LDA HITFLG 2410 BEQ X63 anybody in the window? 2420 JMP ENDISR no 2430 X63 LDA CH 2440 CMP #$21 2450 BNE X80 space bar pressed? 2460 LDX CORPS yes, check for Russian 2470 CPX #$37 2480 BCS X80 2490 LDA #$00 2500 STA CH 2510 STA HMORDS,X clear out orders 2520 STA HOWMNY 2530 STA STPCNT 2540 LDA #$01 2550 STA ORDCNT 2560 JSR CLRP1 2570 JSR CLRP2 2580 LDA BASEX 2590 STA STEPX 2600 LDA BASEY 2610 STA STEPY 2620 X80 LDA RTCLKL 2630 AND #$03 2640 BEQ X54 time to move arrow? 2650 JMP ENDISR no 2660 X54 LDY HOWMNY yes 2670 BNE X65 any orders to show? 2680 JMP PCURSE no, go ahead to maltakreuze 2690 X65 JSR CLRP1 yes, clear old arrow 2700 LDA ORDCNT 2710 LDX #$00 assume first byte 2720 CMP #$05 2730 BCC X52 second byte or first? 2740 INX second byte 2750 X52 AND #$03 isolate bit pair index 2760 TAY 2770 LDA BITTAB,Y get mask 2780 X50 AND ORD1,X get orders 2790 ; 2800 ;right justify orders 2810 ; 2820 DEY 2830 BPL X51 2840 LDY #$03 2850 X51 BEQ X53 2860 LOOP21 LSR A 2870 LSR A 2880 DEY 2890 BNE LOOP21 2900 X53 STA ARRNDX 2910 ASL A 2920 ASL A 2930 ASL A 2940 ;get arrow image and store it to player RAM 2950 TAX 2960 LDY STEPY 2970 X55 LDA ARRTAB,X 2980 CPY #$80 2990 BCS X43 3000 STA PLYR1,Y 3010 X43 INX 3020 INY 3030 TXA 3040 AND #$07 3050 BNE X55 3060 ; 3070 LDA STEPX position arrow 3080 STA HPOSP1 3090 ; 3100 ;now step arrow 3110 ; 3120 LDX ARRNDX 3130 LDA STEPX 3140 CLC 3150 ADC XADD,X 3160 STA STEPX 3170 LDA STEPY 3180 CLC 3190 ADC YADD,X 3200 STA STEPY 3210 ; 3220 INC STPCNT next step 3230 LDA STPCNT 3240 AND #$07 3250 BNE X59 if not done end ISR 3260 STA STPCNT end of steps 3270 INC ORDCNT next order 3280 LDA ORDCNT 3290 CMP HOWMNY last order? 3300 BCC X59 no, out 3310 BEQ X59 no, out 3320 LDA #$01 3330 STA ORDCNT yes, reset to start of arrow's path 3340 ; 3350 ;display maltese cross ('maltakreuze' or KRZ) 3360 ; 3370 PCURSE LDY STEPY 3380 STY KRZY 3390 LDA #$FF 3400 STA KRZFLG 3410 LDX #$00 3420 LOOP24 LDA MLTKRZ,X 3430 CPY #$80 3440 BCS X44 3450 STA PLYR2,Y 3460 X44 INY 3470 INX 3480 CPX #$08 3490 BNE LOOP24 3500 LDA STEPX 3510 SEC 3520 SBC #$01 3530 STA KRZX 3540 STA HPOSP2 3550 JSR CLRP1 clear arrow 3560 LDA BASEX reset arrow's coords 3570 STA STEPX 3580 LDA BASEY 3590 STA STEPY 3600 ; 3610 X59 JMP ENDISR 3620 ; 3630 ;FIRST BUTTON PASS 3640 ;looks for a unit inside cursor 3650 ;if there is one, puts unit info into text window 3660 ; 3670 FBUTPS LDA #$FF 3680 STA BUTFLG 3690 ; 3700 ;first get coords of center of cursor (map frame) 3710 ; 3720 X24 LDA CURSXL 3730 CLC 3740 ADC #$06 3750 STA TXL 3760 LDA CURSXH 3770 ADC #$00 3780 STA TXH 3790 LDA CURSYL 3800 CLC 3810 ADC #$09 3820 STA TYL 3830 LDA CURSYH 3840 ADC #$00 3850 STA TYH 3860 LDA TXH 3870 LSR A 3880 LDA TXL 3890 ROR A 3900 LSR A 3910 LSR A 3920 ; 3930 ;coords of cursor (pixel frame) 3940 ; 3950 STA CHUNKX 3960 LDA TYH 3970 LSR A 3980 TAX 3990 LDA TYL 4000 ROR A 4010 TAY 4020 TXA 4030 LSR A 4040 TYA 4050 ROR A 4060 LSR A 4070 LSR A 4080 STA CHUNKY 4090 ; 4100 ;now look for a match with unit coordinates 4110 ; 4120 LDX #$9E 4130 LOOP6 CMP CORPSY,X 4140 BEQ MAYBE 4150 X16 DEX 4160 BNE LOOP6 4170 STX CORPS no match obtained 4180 DEX 4190 STX HITFLG 4200 JMP ENDISR 4210 ; 4220 MAYBE LDA CHUNKX 4230 CMP CORPSX,X 4240 BNE X35 4250 LDA ARRIVE,X 4260 BMI X35 4270 CMP TURN 4280 BCC MATCH 4290 BEQ MATCH 4300 X35 LDA CHUNKY 4310 JMP X16 4320 ; 4330 ;match obtained 4340 ; 4350 MATCH LDA #$00 4360 STA HITFLG note match 4370 STA CH 4380 LDA #$5C 4390 STA PCOLR0 light up cursor 4400 ; 4410 ;display unit specs 4420 ; 4430 STX CORPS 4440 LDY #$0D 4450 LDA CORPNO,X ID number 4460 JSR DNUMBR 4470 INY 4480 LDX CORPS 4490 LDA CORPT,X first name 4500 STA TEMPI 4510 AND #$F0 4520 LSR A 4530 JSR ENTRY2 4540 LDA TEMPI 4550 AND #$0F second name 4560 CLC 4570 ADC #$08 4580 JSR DWORDS 4590 LDA #$1E 4600 LDX CORPS 4610 CPX #$37 4620 BCS X26 4630 LDA #$1D 4640 X26 JSR DWORDS display unit size (corps or army) 4650 LDY #$38 4660 LDA #$1F "MUSTER" 4670 JSR DWORDS 4680 DEY 4690 LDA #$1A ":" 4700 STA TXTWDW,Y 4710 INY 4720 INY 4730 LDX CORPS 4740 LDA MSTRNG,X muster strength 4750 JSR DNUMBR 4760 INY 4770 INY 4780 LDA #$20 "COMBAT" 4790 JSR DWORDS 4800 LDA #$21 "STRENGTH" 4810 JSR DWORDS 4820 DEY 4830 LDA #$1A ":" 4840 STA TXTWDW,Y 4850 INY 4860 INY 4870 LDX CORPS 4880 LDA CSTRNG,X combat strength 4890 JSR DNUMBR 4900 X27 JSR SWITCH flip unit with terrain 4910 LDA CORPS 4920 CMP #$37 4930 BCC X79 Russian? 4940 LDA #$FF yes, mask orders and exit 4950 STA HITFLG 4960 BMI X75 4970 ; 4980 ;German unit 4990 ;set up orders display 5000 ;first calculate starting coords (BASEX, BASEY) 5010 ; 5020 X79 LDA #$01 5030 STA ORDCNT 5040 LDA #$00 5050 STA STPCNT 5060 ; 5070 LDA TXL 5080 AND #$07 5090 CLC 5100 ADC #$01 5110 CLC 5120 ADC SHPOS0 5130 STA BASEX 5140 STA STEPX 5150 ; 5160 LDA TYL 5170 AND #$0F 5180 LSR A 5190 SEC 5200 SBC #$01 5210 CLC 5220 ADC SCY 5230 STA BASEY 5240 STA STEPY 5250 ; 5260 ;now set up page 6 values 5270 ; 5280 LDX CORPS 5290 LDA HMORDS,X 5300 STA HOWMNY 5310 LDA WHORDS,X 5320 STA ORD1 5330 LDA WHORDH,X 5340 STA ORD2 5350 X75 JMP ENDISR 5360 ; 5370 ;ORDERS INPUT ROUTINE 5380 ; 5390 ORDERS LDA STKFLG 5400 BNE X75 5410 LDX CORPS 5420 CPX #$37 5430 BCC X64 Russian? 5440 LDX #$00 yes, error 5450 JMP SQUAWK 5460 X64 LDA HMORDS,X 5470 CMP #$08 5480 BCC X66 only 8 orders allowed 5490 LDX #$20 5500 JMP SQUAWK 5510 X66 LDA KRZFLG 5520 BNE X67 must wait for maltakreuze 5530 LDX #$40 5540 JMP SQUAWK 5550 X67 INC DBTIMR 5560 LDA DBTIMR wait for debounce time 5570 CMP #$10 5580 BCS X68 5590 BCC X75 5600 X68 LDA #$00 5610 STA DBTIMR reset debounce timer 5620 LDX STICK 5630 LDA STKTAB,X 5640 BPL X69 5650 LDX #$60 no diagonal orders allowed 5660 JMP SQUAWK 5670 ; 5680 ;OK, this is a good order 5690 ; 5700 X69 TAY 5710 STA STICKI 5720 LDA BEEPTB,Y 5730 STA AUDF1 "BEEP!" 5740 LDA #$A8 5750 STA AUDC1 5760 LDA #$FF 5770 STA STKFLG 5780 ; 5790 LDX CORPS 5800 INC HMORDS,X 5810 LDA HMORDS,X 5820 STA HOWMNY 5830 SEC 5840 SBC #$01 5850 AND #$03 5860 TAY 5870 STY TEMPI 5880 LDA HMORDS,X 5890 SEC 5900 SBC #$01 5910 LSR A 5920 LSR A 5930 TAX 5940 LDA STICKI 5950 ;isolate order 5960 X71 DEY 5970 BMI X70 5980 ASL A 5990 ASL A 6000 JMP X71 6010 X70 LDY TEMPI 6020 EOR ORD1,X fold in new order (sneaky code) 6030 AND MASKO,Y 6040 EOR ORD1,X 6050 STA ORD1,X 6060 LDA ORD1 6070 LDX CORPS 6080 STA WHORDS,X 6090 LDA ORD2 6100 STA WHORDH,X 6110 ; 6120 ;move maltakreuze 6130 ; 6140 JSR CLRP2 6150 LDX STICKI 6160 LDA KRZX 6170 CLC 6180 ADC XOFF,X 6190 STA KRZX 6200 LDA KRZY 6210 CLC 6220 ADC YOFF,X 6230 STA KRZY 6240 DSPKRZ LDA KRZX display it 6250 STA HPOSP2 6260 LDY KRZY 6270 LDX #$00 6280 LOOP26 LDA MLTKRZ,X 6290 CPY #$80 6300 BCS X45 6310 STA PLYR2,Y 6320 X45 INY 6330 INX 6340 CPX #$08 6350 BNE LOOP26 6360 BEQ EXITI 6370 ; 6380 ;ERROR on inputs routine 6390 ;squawks speaker and puts out error message 6400 ; 6410 SQUAWK LDY #$69 6420 LOOP28 LDA ERRMSG,X 6430 SEC 6440 SBC #$20 6450 STA TXTWDW,Y 6460 INY 6470 INX 6480 TXA 6490 AND #$1F 6500 BNE LOOP28 6510 LDA #$68 6520 STA AUDC1 6530 LDA #$50 6540 STA AUDF1 "HONK!" 6550 LDA #$FF 6560 STA ERRFLG 6570 BMI EXITI 6580 ; 6590 ;NO BUTTON PRESSED ROUTINE 6600 ; 6610 NOBUT STA DBTIMR 6620 LDA STICK 6630 AND #$0F 6640 EOR #$0F 6650 BNE SCROLL 6660 STA AUDC1 6670 STA STKFLG 6680 LDA #$08 6690 STA DELAY 6700 CLC 6710 ADC RTCLKL 6720 STA TIMSCL 6730 JSR ERRCLR 6740 EXITI JMP ENDISR 6750 SCROLL LDA #$00 6760 STA ATRACT 6770 ; 6780 ;acceleration feature of cursor 6790 ; 6800 LDA TIMSCL 6810 CMP RTCLKL 6820 BNE EXITI 6830 LDA DELAY 6840 CMP #$01 6850 BEQ X21 6860 SEC 6870 SBC #$01 6880 STA DELAY 6890 X21 CLC 6900 ADC RTCLKL 6910 STA TIMSCL 6920 ; 6930 LDA #$00 6940 STA OFFLO 6950 STA OFFHI zero the offset 6960 ; 6970 LDA STICK get joystick reading 6980 PHA save it on stack for other bit checks 6990 AND #$08 joystick left? 7000 BNE CHKRT no, move on 7010 LDA CURSXL 7020 BNE X13 7030 LDX CURSXH 7040 BEQ CHKUP 7050 X13 SEC 7060 SBC #$01 7070 STA CURSXL 7080 BCS X14 7090 DEC CURSXH 7100 X14 LDA SHPOS0 7110 CMP #$BA 7120 BEQ X1 7130 CLC 7140 ADC #$01 7150 STA SHPOS0 7160 STA HPOSP0 7170 BNE CHKUP 7180 X1 LDA XPOSL 7190 SEC decrement x-coordinate 7200 SBC #$01 7210 STA XPOSL 7220 AND #$07 7230 STA HSCROLL fine scroll 7240 CMP #$07 scroll overflow? 7250 BNE CHKUP no, move on 7260 INC OFFLO yes, mark it for offset 7270 CLV 7280 BVC CHKUP no point in checking for joystick right 7290 CHKRT PLA get back joystick byte 7300 PHA save it again 7310 AND #$04 joystick right? 7320 BNE CHKUP no, move on 7330 LDA CURSXL 7340 CMP #$64 7350 BNE X12 7360 LDX CURSXH 7370 BNE CHKUP 7380 X12 CLC 7390 ADC #$01 7400 STA CURSXL 7410 BCC X15 7420 INC CURSXH 7430 X15 LDA SHPOS0 7440 CMP #$36 7450 BEQ X2 7460 SEC 7470 SBC #$01 7480 STA SHPOS0 7490 STA HPOSP0 7500 BNE CHKUP 7510 X2 LDA XPOSL 7520 CLC no, increment x-coordinate 7530 ADC #$01 7540 STA XPOSL 7550 X4 AND #$07 7560 STA HSCROLL fine scroll 7570 BNE CHKUP scroll overflow? if not, move on 7580 DEC OFFLO yes, set up offset for character scroll 7590 DEC OFFHI 7600 CHKUP PLA joystick up? 7610 LSR A 7620 PHA 7630 BCS CHKDN no, ramble on 7640 LDA CURSYL 7650 CMP #$5E 7660 BNE X3 7670 LDX CURSYH 7680 CPX #$02 7690 BEQ CHKDN 7700 X3 INC CURSYL 7710 BNE X11 7720 INC CURSYH 7730 X11 LDX SCY 7740 CPX #$1B 7750 BEQ X6 7760 INC CURSYL 7770 BNE X18 7780 INC CURSYH 7790 X18 DEX 7800 STX SCY 7810 TXA 7820 CLC 7830 ADC #$12 7840 STA TEMPI 7850 LOOP4 LDA PLYR0,X 7860 STA PLYR0-1,X 7870 INX 7880 CPX TEMPI 7890 BNE LOOP4 7900 BEQ CHKDN 7910 X6 LDA YPOSL 7920 SEC 7930 SBC #$01 7940 BCS X7 7950 DEC YPOSH 7960 X7 STA YPOSL 7970 AND #$0F 7980 STA VSCROLL fine scroll 7990 CMP #$0F 8000 BNE CHKDN scroll overflow? If not, amble on 8010 LDA OFFLO yes, set up offset for character scroll 8020 SEC 8030 SBC #$30 8040 STA OFFLO 8050 LDA OFFHI 8060 SBC #$00 8070 STA OFFHI 8080 CHKDN PLA joystick down? 8090 LSR A 8100 BCS CHGDL no, trudge on 8110 LDA CURSYL 8120 CMP #$02 8130 BNE X5 8140 LDX CURSYH 8150 BEQ CHGDL 8160 X5 SEC 8170 SBC #$01 8180 STA CURSYL 8190 BCS X10 8200 DEC CURSYH 8210 X10 LDX SCY 8220 CPX #$4E 8230 BEQ X8 8240 SEC 8250 SBC #$01 8260 STA CURSYL 8270 BCS X19 8280 DEC CURSYH 8290 X19 INX 8300 STX SCY 8310 TXA 8320 CLC 8330 ADC #$12 8340 DEX 8350 DEX 8360 STX TEMPI 8370 TAX 8380 LOOP5 LDA PLYR0-1,X 8390 STA PLYR0,X 8400 DEX 8410 CPX TEMPI 8420 BNE LOOP5 8430 BEQ CHGDL 8440 X8 LDA YPOSL 8450 CLC no, decrement y-coordinate 8460 ADC #$01 8470 STA YPOSL 8480 BCC X9 8490 INC YPOSH 8500 X9 AND #$0F 8510 STA VSCROLL fine scroll 8520 BNE CHGDL no, move on 8530 LDA OFFLO yes, mark offset 8540 CLC 8550 ADC #$30 8560 STA OFFLO 8570 LDA OFFHI 8580 ADC #$00 8590 STA OFFHI 8600 ; 8610 ;In this loop we add the offset values to the existing 8620 ;LMS addresses of all display lines. 8630 ;This scrolls the characters. 8640 ; 8650 CHGDL LDY #$09 8660 DLOOP LDA (DLSTPT),Y 8670 CLC 8680 ADC OFFLO 8690 STA (DLSTPT),Y 8700 INY 8710 LDA (DLSTPT),Y 8720 ADC OFFHI 8730 STA (DLSTPT),Y 8740 INY 8750 INY 8760 CPY #$27 8770 BNE DLOOP 8780 ; 8790 ENDISR LDA YPOSH 8800 LSR A 8810 LDA YPOSL 8820 ROR A 8830 LSR A 8840 LSR A 8850 LSR A 8860 CMP #$11 8870 BCS X39 8880 LDA #$FF 8890 BMI X40 8900 X39 CMP #$1A 8910 BCC X41 8920 LDA #$02 8930 BPL X40 8940 X41 STA TEMPI 8950 INX 8960 LDA #$1D 8970 SEC 8980 SBC TEMPI 8990 X40 STA CNT1 9000 LDA #$00 9010 STA CNT2 9020 JMP XITVBV exit vertical blank routine 9030 ; 9040 *=$799C 9050 JSTP .BYTE 0,0,0,0,3,3,3,3 9060 .BYTE 2,2,2,2,1,1,1,0 9070 .BYTE 0,0,3,3,2,2,1,0 9080 DEFNC .BYTE 2,3,3,2,2,2,1,1,2,0 9090 *=$79C0 9100 ; 9110 ;SUBROUTINE DWORDS 9120 ;displays a single word from a long table of words 9130 ; 9140 DWORDS ASL A 9150 ASL A 9160 ASL A 9170 BCC ENTRY2 9180 TAX 9190 BOOP20 LDA WORDS+256,X 9200 SEC 9210 SBC #$20 9220 BEQ BNDW 9230 STA TXTWDW,Y 9240 INY 9250 INX 9260 TXA 9270 AND #$07 9280 BNE BOOP20 9290 BNDW INY 9300 RTS 9310 ENTRY2 TAX this is another entry point 9320 LOOP20 LDA WORDS,X 9330 SEC 9340 SBC #$20 9350 BEQ NDW 9360 STA TXTWDW,Y 9370 INY 9380 INX 9390 TXA 9400 AND #$07 9410 BNE LOOP20 9420 NDW INY 9430 RTS 9440 ; 9450 ; 9460 ;SUBROUTINE SWITCH FOR SWAPPING CORPS WITH TERRAIN 9470 ; 9480 SWITCH LDA #$00 9490 STA MAPHI 9500 LDA #$27 9510 SEC 9520 SBC CHUNKY 9530 ASL A 9540 ROL MAPHI 9550 ASL A 9560 ROL MAPHI 9570 ASL A 9580 ROL MAPHI 9590 ASL A 9600 ROL MAPHI 9610 STA TEMPLO 9620 LDX MAPHI 9630 STX TEMPHI 9640 ASL A 9650 ROL MAPHI 9660 CLC 9670 ADC TEMPLO 9680 STA MAPLO 9690 LDA MAPHI 9700 ADC TEMPHI 9710 ADC #$65 9720 STA MAPHI 9730 LDA #46 9740 SEC 9750 SBC CHUNKX 9760 TAY 9770 LDA (MAPLO),Y 9780 LDX CORPS 9790 BEQ X34 9800 PHA 9810 LDA SWAP,X 9820 STA (MAPLO),Y 9830 PLA 9840 STA SWAP,X 9850 X34 RTS 9860 ; 9870 ;SUBROUTINE CLRP1 9880 ;clears the arrow player 9890 ; 9900 CLRP1 LDA #$00 9910 LDY STEPY 9920 DEY 9930 TAX 9940 LOOP23 CPY #$80 9950 BCS X22 9960 STA PLYR1,Y 9970 X22 INY 9980 INX 9990 CPX #$0B 010000 BNE LOOP23 010010 RTS 010020 ; 010030 ;SUBROUTINE CLRP2 010040 ;clears the maltakreuze 010050 ; 010060 CLRP2 LDA #$00 010070 LDY KRZY 010080 TAX 010090 LOOP25 CPY #$80 010100 BCS X42 010110 STA PLYR2,Y 010120 X42 INY 010130 INX 010140 CPX #$0A 010150 BNE LOOP25 010160 RTS 010170 ; 010180 ;SUBROUTINE ERRCLR 010190 ;clears sound and the text window 010200 ; 010210 ERRCLR LDA ERRFLG 010220 BPL ENDERR 010230 LDA #$00 010240 STA ERRFLG 010250 LDY #$86 010260 LDX #$1F 010270 LOOP29 STA TXTWDW,Y 010280 DEY 010290 DEX 010300 BPL LOOP29 010310 ENDERR RTS 010320 ; 010330 BITTAB .BYTE $C0,3,$C,$30 010340 ROTARR .BYTE 4,9,14,19,24 010350 .BYTE 3,8,13,18,23 010360 .BYTE 2,7,12,17,22 010370 .BYTE 1,6,11,16,21 010380 .BYTE 0,5,10,15,20 010390 OBJX *=*+104 010400 ; 010410 ;From here to $7B00 is expansion RAM 010420 ; 010430 ;This is the DLI routine 010440 ; 010450 *=$7B00 010460 DLISRV PHA 010470 TXA 010480 PHA 010490 INC CNT2 010500 LDA CNT2 010510 CMP CNT1 010520 BNE OVER1 010530 LDX #$62 map DLI 010540 LDA #$28 010550 EOR COLRSH 010560 AND DRKMSK 010570 STA WSYNC 010580 STX CHBASE 010590 STA COLPF0 010600 JMP DLIOUT 010610 ; 010620 OVER1 CMP #$0F 010630 BNE OVER6 010640 LDA #$3A 010650 EOR COLRSH 010660 AND DRKMSK 010670 TAX 010680 LDA #$00 010690 EOR COLRSH 010700 AND DRKMSK 010710 STA WSYNC 010720 STX COLPF2 010730 STA COLPF1 010740 JMP DLIOUT 010750 ; 010760 OVER6 CMP #$01 010770 BNE OVER2 010780 LDA TRCOLR green tree color 010790 EOR COLRSH 010800 AND DRKMSK 010810 TAX 010820 LDA #$1A yellow band at top of map 010830 EOR COLRSH 010840 AND DRKMSK 010850 STA WSYNC 010860 STA COLBAK 010870 STX COLPF0 010880 LDA #$60 010890 STA CHBASE 010900 JMP DLIOUT 010910 ; 010920 OVER2 CMP #$03 010930 BNE OVER3 010940 LDA EARTH top of map 010950 EOR COLRSH 010960 AND DRKMSK 010970 STA WSYNC 010980 STA COLBAK 010990 JMP DLIOUT 011000 ; 011010 OVER3 CMP #$0D 011020 BNE OVER4 011030 LDX #$E0 bottom of map 011040 LDA #$22 011050 EOR COLRSH 011060 AND DRKMSK 011070 STA WSYNC 011080 STA COLPF2 011090 STX CHBASE 011100 JMP DLIOUT 011110 ; 011120 OVER4 CMP #$0E 011130 BNE OVER5 011140 LDA #$8A bright blue strip 011150 EOR COLRSH 011160 AND DRKMSK 011170 STA WSYNC 011180 STA COLBAK 011190 JMP DLIOUT 011200 ; 011210 OVER5 CMP #$10 011220 BNE DLIOUT 011230 LDA #$D4 green bottom 011240 EOR COLRSH 011250 AND DRKMSK 011260 PHA some extra delay 011270 PLA 011280 NOP 011290 STA COLBAK 011300 ; 011310 DLIOUT PLA 011320 TAX 011330 PLA 011340 RTI 011350 ; 011360 ;SUBROUTINE DNUMBR 011370 ;displays a number with leading zero suppress 011380 ; 011390 DNUMBR TAX 011400 CLC 011410 LDA HDIGIT,X 011420 BEQ X36 011430 ADC #$10 011440 STA TXTWDW,Y 011450 INY 011460 SEC 011470 X36 LDA TDIGIT,X 011480 BCS X38 011490 BEQ X37 011500 X38 CLC 011510 ADC #$10 011520 STA TXTWDW,Y 011530 INY 011540 X37 LDA ODIGIT,X 011550 CLC 011560 ADC #$10 011570 STA TXTWDW,Y 011580 INY 011590 RTS 011600 ; 011610 NDX .BYTE 0,1,2,3,4,9,14,19 011620 .BYTE 24,23,22,21,20,15,10,5 011630 .BYTE 6,7,8,13,18,17,16,11 011640 YINC .BYTE 1 011650 XINC .BYTE 0,$FF,0,1 011660 OFFNC .BYTE 1,1,1,1,1,1,2,2,1,0 011670 .END 10 ;EFT VERSION 1.8M (MAINLINE) 11/30/81 COPYRIGHT CHRIS CRAWFORD 1981 20 ; 30 ;Page zero RAM 40 DLSTPT=$B0 Zero page pointer to display list 50 CORPS=$B4 60 *=$BE 70 CHUNKX *=*+1 cursor coordinates (pixel frame) 80 CHUNKY *=*+1 90 ; 0100 ;These locations are for the mainline routines 0110 ; 0120 MAPPTR *=*+2 0130 ARMY *=*+1 0140 UNITNO *=*+1 0150 DEFNDR *=*+1 0160 TEMPR *=*+1 0170 TEMPZ *=*+1 0180 ACCLO *=*+1 0190 ACCHI *=*+1 0200 TURN *=*+1 0210 LAT *=*+1 0220 LONG *=*+1 0230 RFR *=*+1 0240 TRNTYP *=*+1 0250 SQVAL *=*+1 0260 ; 0270 ;OS locations (see OS manual) 0280 ; 0290 SDMCTL=$022F 0300 DLSTLO=$0230 Existing OS pointer to display list 0310 DLSTHI=$0231 0320 GPRIOR=$026F 0330 PCOLR0=$02C0 0340 ; 0350 ;HARDWARE LOCATIONS 0360 ; 0370 HPOSP0=$D000 0380 SIZEP0=$D008 0390 COLBAK=$D01A 0400 GRACTL=$D01D 0410 RANDOM=$D20A 0420 HSCROL=$D404 0430 VSCROL=$D405 0440 PMBASE=$D407 0450 NMIEN=$D40E 0460 SETVBV=$E45C 0470 ; 0480 ;Page 6 usage 0490 ; 0500 *=$0600 0510 ;first come locations used by the interrupt service routine 0520 XPOSL *=*+5 Horizontal position of screen window 0530 TRCOLR *=*+1 0540 EARTH *=*+1 0550 ICELAT *=*+1 0560 SEASN1 *=*+1 0570 SEASN2 *=*+1 0580 SEASN3 *=*+1 0590 DAY *=*+1 0600 MONTH *=*+1 0610 YEAR *=*+1 0620 BUTFLG *=*+1 0630 BUTMSK *=*+1 0640 ; 0650 ;THESE VALUES ARE USED BY MAINLINE ROUTINE ONLY 0660 ; 0670 *=$62A 0680 OLDLAT *=*+1 0690 TRNCOD *=*+1 0700 TLO *=*+1 0710 THI *=*+1 0720 TICK *=*+1 0730 UNTCOD *=*+1 0740 UNTCD1 *=*+1 0750 ; 0760 HANDCP=$68F 0770 ZOC=$694 0780 VICTRY=$697 0790 ; 0800 ;declarations of routines in other modules 0810 ; 0820 CHKZOC=$5140 0830 LOGSTC=$5091 0840 DNUMBR=$7BB2 0850 DWORDS=$79C0 0860 SWITCH=$79EF 0870 YINC=$7BF1 0880 XINC=$7BF2 0890 ; 0900 *=$5200 0910 PLYR0 *=*+512 0920 CORPSX *=*+159 x-coords of all units (pixel frame) 0930 CORPSY *=*+159 y-coords of all units (pixel frame) 0940 MSTRNG *=*+159 muster strengths 0950 CSTRNG *=*+159 combat strengths 0960 SWAP *=*+159 terrain code underneath unit 0970 ARRIVE *=*+159 turn of arrival 0980 *=$5C08 0990 ODIGIT *=*+256 1000 TXTTBL *=*+96 more text 1010 MONLEN *=*+13 table of month lengths 1020 HMORDS *=*+159 how many orders each unit has in queue 1030 WHORDS *=*+159 what the orders are 1040 WHORDH *=*+159 1050 *=$5FE2 1060 XADD *=*+4 offsets for moving arrow 1070 YADD *=*+4 1080 TRTAB *=*+13 1090 MLTKRZ *=*+8 maltese cross shape 1100 ; 1110 *=$6450 1120 TXTWDW *=$6CB1 1130 STKTAB *=*+16 a joystick decoding table 1140 SSNCOD *=*+12 1150 TRNTAB *=*+60 1160 BHX1 *=*+22 1170 BHY1 *=*+22 1180 BHX2 *=*+22 1190 BHY2 *=*+22 1200 EXEC *=*+159 1210 ; 1220 ;This is the initialization program 1230 ;The program begins here 1240 ; 1250 *=$6E00 1260 ; 1270 LDX #$08 1280 BOOP99 LDA ZPVAL,X initialize page zero values 1290 STA DLSTPT,X 1300 LDA COLTAB,X 1310 STA PCOLR0,X 1320 DEX 1330 BPL BOOP99 1340 ; 1350 LDX #$0F 1360 BOOP98 LDA PSXVAL,X initialize page six values 1370 STA XPOSL,X 1380 DEX 1390 BPL BOOP98 1400 ; 1410 LDA #$00 1420 STA DLSTLO 1430 STA HSCROL 1440 STA VSCROL 1450 LDA DLSTPT+1 1460 STA DLSTHI 1470 ; 1480 LDX #$00 1490 LOOP22 LDA MSTRNG,X 1500 STA CSTRNG,X 1510 LDA #$00 1520 STA HMORDS,X 1530 LDA #$FF 1540 STA EXEC,X 1550 INX 1560 CPX #$A0 1570 BNE LOOP22 1580 ; 1590 ; 1600 ;Now set up player window 1610 ; 1620 LDA #$50 1630 STA PMBASE 1640 ; 1650 ;here follow various initializations 1660 ; 1670 LDA #$2F 1680 STA SDMCTL 1690 LDA #$03 1700 STA GRACTL 1710 LDA #$78 1720 STA HPOSP0 1730 LDA #$01 1740 STA HANDCP 1750 STA GPRIOR 1760 STA SIZEP0 1770 LDX #$33 1780 ; 1790 LDA #$FF 1800 STA PLYR0,X 1810 INX 1820 STA PLYR0,X 1830 INX 1840 LDA #$81 1850 LOOP2 STA PLYR0,X 1860 INX 1870 CPX #$3F 1880 BNE LOOP2 1890 LDA #$FF 1900 STA PLYR0,X 1910 STA TURN 1920 INX 1930 STA PLYR0,X 1940 ; 1950 ;Now enable deferred vertical blank interrupt 1960 ; 1970 LDY #$00 1980 LDX #$74 1990 LDA #$07 2000 JSR SETVBV 2010 LDA #$00 This is DLI vector (low byte) 2020 STA $0200 2030 LDA #$7B 2040 STA $0201 2050 LDA #$C0 2060 STA NMIEN Turn interrupts on 2070 ; 2080 NEWTRN INC TURN 2090 ; 2100 ;first do calendar calculations 2110 ; 2120 LDA DAY 2130 CLC 2140 ADC #07 2150 LDX MONTH 2160 CMP MONLEN,X 2170 BEQ X28 2180 BCC X28 2190 CPX #$02 2200 BNE X96 2210 LDY YEAR 2220 CPY #44 2230 BNE X96 2240 SEC 2250 SBC #$01 2260 X96 SEC 2270 SBC MONLEN,X 2280 INX 2290 CPX #13 2300 BNE X29 2310 INC YEAR 2320 LDX #01 2330 X29 STX MONTH 2340 LDY TRTAB,X 2350 STY TRCOLR 2360 X28 STA DAY 2370 LDY #$93 2380 LDA #$00 2390 LOOP13 STA TXTWDW,Y 2400 INY 2410 CPY #$A7 2420 BNE LOOP13 2430 LDY #$93 2440 TXA 2450 CLC 2460 ADC #$10 2470 JSR DWORDS 2480 LDA DAY 2490 JSR DNUMBR 2500 LDA #$0C 2510 STA TXTWDW,Y 2520 INY 2530 INY 2540 LDA #$11 2550 STA TXTWDW,Y 2560 INY 2570 LDA #$19 2580 STA TXTWDW,Y 2590 INY 2600 LDX YEAR 2610 LDA #$14 2620 STA TXTWDW,Y 2630 INY 2640 LDA ODIGIT,X 2650 CLC 2660 ADC #$10 2670 STA TXTWDW,Y 2680 ; 2690 ;now do season calculations 2700 ; 2710 LDA MONTH 2720 CMP #$04 2730 BNE X87 2740 LDA #$02 2750 STA EARTH 2760 LDA #$40 2770 STA SEASN1 2780 LDA #$01 2790 STA SEASN3 2800 LDA #$00 2810 STA SEASN2 2820 JMP ENDSSN 2830 X87 CMP #$0A 2840 BNE X88 2850 LDA #$02 2860 STA EARTH 2870 JMP ENDSSN 2880 X88 CMP #$05 2890 BNE X89 2900 LDA #$10 2910 STA EARTH 2920 JMP ENDSSN 2930 X89 CMP #$0B 2940 BNE X90 2950 LDA #$0A 2960 STA EARTH 2970 JMP X91 2980 X90 CMP #$01 2990 BNE X92 3000 LDA #$80 3010 STA SEASN1 3020 LDA #$FF 3030 STA SEASN2 3040 STA SEASN3 3050 JMP ENDSSN 3060 X92 CMP #$03 3070 BEQ X91 3080 JMP ENDSSN 3090 ; 3100 ; 3110 ;freeze those rivers, baby 3120 ; 3130 X91 LDA RANDOM 3140 AND #$07 3150 CLC 3160 ADC #$07 3170 EOR SEASN2 3180 STA TEMPR 3190 LDA ICELAT 3200 STA OLDLAT 3210 SEC 3220 SBC TEMPR 3230 BEQ X95 3240 BPL X94 3250 X95 LDA #$01 3260 X94 CMP #$27 3270 BCC X93 3280 LDA #$27 3290 X93 STA ICELAT 3300 LDA #$01 3310 STA CHUNKX 3320 STA LONG 3330 LDA OLDLAT 3340 STA CHUNKY 3350 STA LAT 3360 ; 3370 LOOP40 JSR TERR 3380 ; 3390 AND #$3F 3400 CMP #$0B 3410 BCC NOTCH 3420 CMP #$29 3430 BCS NOTCH 3440 LDX CHUNKY 3450 CPX #$0E 3460 BCS DOTCH 3470 CMP #$23 3480 BCS NOTCH 3490 DOTCH ORA SEASN1 3500 LDX UNITNO 3510 BEQ X86 3520 STA SWAP,X 3530 JMP NOTCH 3540 X86 STA (MAPPTR),Y 3550 NOTCH INC CHUNKX 3560 LDA CHUNKX 3570 STA LONG 3580 CMP #46 3590 BNE LOOP40 3600 LDA #$00 3610 STA CHUNKX 3620 STA LONG 3630 LDA CHUNKY 3640 CMP ICELAT 3650 BEQ ENDSSN 3660 SEC 3670 SBC SEASN3 3680 STA CHUNKY 3690 STA LAT 3700 JMP LOOP40 3710 ; 3720 ENDSSN LDX #$9E any reinforcements? 3730 LOOP14 LDA ARRIVE,X 3740 CMP TURN 3750 BNE X33 3760 LDA CORPSX,X 3770 STA CHUNKX 3780 STA LONG 3790 LDA CORPSY,X 3800 STA CHUNKY 3810 STA LAT 3820 STX CORPS 3830 JSR TERRB 3840 BEQ SORRY 3850 CPX #$37 3860 BCS A51 3870 LDA #$0A 3880 STA TXTWDW+36 3890 A51 JSR SWITCH 3900 JMP X33 3910 SORRY LDA TURN 3920 CLC 3930 ADC #$01 3940 STA ARRIVE,X 3950 X33 DEX 3960 BNE LOOP14 3970 ; 3980 X31 LDX #$9E 3990 LOOPF STX ARMY 4000 JSR LOGSTC logistics subroutine 4010 LDX ARMY 4020 DEX 4030 BNE LOOPF 4040 ; 4050 ;calculate some points 4060 ; 4070 LDA #$00 4080 STA ACCLO 4090 STA ACCHI 4100 LDX #$01 4110 LOOPB LDA #$30 4120 SEC 4130 SBC CORPSX,X 4140 STA TEMPR 4150 LDA MSTRNG,X 4160 LSR A 4170 BEQ A01 4180 TAY 4190 LDA #$00 4200 CLC 4210 LOOPA ADC TEMPR 4220 BCC A0 4230 INC ACCHI 4240 CLC 4250 BNE A0 4260 DEC ACCHI 4270 A0 DEY 4280 BNE LOOPA 4290 A01 INX 4300 CPX #$37 4310 BNE LOOPB 4320 ; 4330 LOOPC LDA CORPSX,X 4340 STA TEMPR 4350 LDA CSTRNG,X 4360 LSR A 4370 LSR A 4380 LSR A 4390 BEQ A02 4400 TAY 4410 LDA #$00 4420 CLC 4430 LOOPD ADC TEMPR 4440 BCC A03 4450 INC ACCLO 4460 CLC 4470 BNE A03 4480 DEC ACCLO 4490 A03 DEY 4500 BNE LOOPD 4510 A02 INX 4520 CPX #$9E 4530 BNE LOOPC 4540 ; 4550 LDA ACCHI 4560 SEC 4570 SBC ACCLO 4580 BCS A04 4590 LDA #$00 4600 A04 LDX #$03 4610 LOOPG LDY MOSCOW,X 4620 BEQ A15 4630 CLC 4640 ADC MPTS,X 4650 BCC A15 4660 LDA #$FF 4670 A15 DEX 4680 BPL LOOPG 4690 ; 4700 LDX HANDCP was handicap option used? 4710 BNE A23 no 4720 LSR A yes, halve score 4730 A23 LDY #$05 4740 JSR DNUMBR 4750 LDA #$00 4760 STA TXTWDW,Y 4770 LDA TURN 4780 CMP #$28 4790 BNE Z00 4800 LDA #$01 end of game 4810 JSR TXTMSG 4820 FINI JMP FINI hang up 4830 ; 4840 ; 4850 Z00 LDA #$00 4860 STA BUTMSK 4870 STA CORPS 4880 JSR TXTMSG 4890 JSR $4700 artificial intelligence routine 4900 LDA #$01 4910 STA BUTMSK 4920 LDA #$02 4930 JSR TXTMSG 4940 ; 4950 ;movement execution phase 4960 ; 4970 LDA #$00 4980 STA TICK 4990 LDX #$9E 5000 LOOP31 STX ARMY 5010 JSR DINGO determine first execution time 5020 DEX 5030 BNE LOOP31 5040 ; 5050 LOOP33 LDX #$9E 5060 LOOP32 STX ARMY 5070 LDA MSTRNG,X 5080 SEC 5090 SBC CSTRNG,X 5100 CMP #$02 5110 BCC Y30 5120 INC CSTRNG,X 5130 CMP RANDOM 5140 BCC Y30 5150 INC CSTRNG,X 5160 Y30 LDA EXEC,X 5170 BMI A60 5180 CMP TICK 5190 BNE A60 5200 LDA WHORDS,X 5210 AND #$03 5220 TAY 5230 LDA CORPSX,X 5240 CLC 5250 ADC XINC,Y 5260 STA LONG 5270 STA ACCLO 5280 LDA CORPSY,X 5290 CLC 5300 ADC YINC,Y 5310 STA LAT 5320 STA ACCHI 5330 JSR TERR 5340 LDA UNITNO 5350 BEQ DOMOVE 5360 CMP #$37 5370 BCC GERMAN 5380 LDA ARMY 5390 CMP #$37 5400 BCS TRJAM 5410 BCC COMBAT 5420 GERMAN LDA ARMY 5430 CMP #$37 5440 BCS COMBAT 5450 TRJAM LDX ARMY 5460 LDA TICK 5470 CLC 5480 ADC #$02 5490 STA EXEC,X 5500 A60 JMP Y06 5510 COMBAT JSR $4ED8 5520 LDA VICTRY 5530 BEQ A60 5540 BNE Z94 5550 DOMOVE LDX ARMY 5560 STX CORPS 5570 LDA CORPSY,X 5580 STA CHUNKY 5590 STA LAT 5600 LDA CORPSX,X 5610 STA CHUNKX 5620 STA LONG 5630 JSR CHKZOC 5640 LDA ACCHI 5650 STA LAT 5660 LDA ACCLO 5670 STA LONG 5680 LDA ZOC 5690 CMP #$02 5700 BCC Z94 5710 JSR CHKZOC 5720 LDA ZOC 5730 CMP #$02 5740 BCS TRJAM 5750 Z94 JSR SWITCH 5760 LDX CORPS 5770 LDA LAT 5780 STA CHUNKY 5790 STA CORPSY,X 5800 LDA LONG 5810 STA CHUNKX 5820 STA CORPSX,X 5830 JSR SWITCH 5840 LDX ARMY 5850 LDA #$FF 5860 STA EXEC,X 5870 DEC HMORDS,X 5880 BEQ Y06 5890 LSR WHORDH,X 5900 ROR WHORDS,X 5910 LSR WHORDH,X 5920 ROR WHORDS,X 5930 LDY #$03 5940 LOOPH LDA CORPSX,X 5950 CMP MOSCX,Y 5960 BNE A18 5970 LDA CORPSY,X 5980 CMP MOSCY,Y 5990 BNE A18 6000 LDA #$FF 6010 CPX #$37 6020 BCC A19 6030 LDA #$00 6040 A19 STA MOSCOW,Y 6050 A18 DEY 6060 BPL LOOPH 6070 ; 6080 JSR DINGO 6090 JSR STALL 6100 Y06 LDX ARMY 6110 DEX 6120 BEQ Y07 6130 JMP LOOP32 6140 Y07 INC TICK 6150 LDA TICK 6160 CMP #$20 6170 BEQ Y08 6180 JMP LOOP33 6190 ; 6200 ;end of movement phase 6210 ; 6220 Y08 JMP NEWTRN 6230 ; 6240 MOSCOW .BYTE 0,0,0,0 6250 ; 6260 *=$7200 6270 STALL LDA #$00 6280 LOOP79 PHA 6290 PLA 6300 PHA 6310 PLA 6320 PHA 6330 PLA 6340 ADC #$01 6350 BNE LOOP79 6360 RTS 6370 ; 6380 ;this is the debugging routine 6390 ;it can't be reached by any route any longer 6400 ; 6410 ; 6420 *=$7210 6430 LDA #$00 6440 STA $D01D 6450 STA $D00D 6460 STA $D00E 6470 STA $D00F 6480 LDA #$22 6490 STA $22F 6500 LDA #$20 6510 STA $230 6520 LDA #$BC 6530 STA $231 6540 LDA #$40 6550 STA NMIEN 6560 LDA #$0A 6570 STA $2C5 6580 LDA #$00 6590 STA $5FFF 6600 STA $2C8 6610 BRK 6620 ; 6630 ; 6640 ; 6650 ;Subroutine TERR determines what terrain is in a square 6660 ; 6670 *=$7240 6680 ; 6690 TERR JSR TERRB 6700 BEQ LOOKUP 6710 RTS 6720 TERRB LDA #$00 6730 STA MAPPTR+1 6740 STA UNITNO 6750 LDA #$27 6760 SEC 6770 SBC LAT 6780 ASL A 6790 ROL MAPPTR+1 6800 ASL A 6810 ROL MAPPTR+1 6820 ASL A 6830 ROL MAPPTR+1 6840 ASL A 6850 ROL MAPPTR+1 6860 STA TLO 6870 LDY MAPPTR+1 6880 STY THI 6890 ASL A 6900 ROL MAPPTR+1 6910 CLC 6920 ADC TLO 6930 STA MAPPTR 6940 LDA MAPPTR+1 6950 ADC THI 6960 ADC #$65 6970 STA MAPPTR+1 6980 LDA #46 6990 SEC 7000 SBC LONG 7010 TAY 7020 LDA (MAPPTR),Y 7030 STA TRNCOD 7040 AND #$3F 7050 CMP #$3D 7060 BEQ A80 7070 CMP #$3E 7080 A80 RTS 7090 ; 7100 LOOKUP LDA TRNCOD 7110 STA UNTCOD 7120 AND #$C0 7130 LDX #$9E 7140 CMP #$40 7150 BNE X98 7160 LDX #$37 7170 X98 LDA LAT 7180 LOOP30 CMP CORPSY,X 7190 BEQ MIGHTB 7200 X97 DEX 7210 BNE LOOP30 7220 LDA #$FF 7230 STA TXTWDW+128 7240 BMI MATCH 7250 MIGHTB LDA LONG 7260 CMP CORPSX,X 7270 BNE X99 7280 LDA CSTRNG,X 7290 BEQ X99 7300 LDA ARRIVE,X 7310 BMI X99 7320 CMP TURN 7330 BCC MATCH 7340 BEQ MATCH 7350 X99 LDA LAT 7360 JMP X97 7370 MATCH STX UNITNO 7380 LDA SWAP,X 7390 STA TRNCOD 7400 RTS 7410 ; 7420 ;determines execution time of next move 7430 ; 7440 DINGO LDX ARMY 7450 LDA HMORDS,X 7460 BNE Y00 7470 LDA #$FF 7480 STA EXEC,X 7490 RTS 7500 Y00 LDA CORPSX,X 7510 STA LONG 7520 LDA CORPSY,X 7530 STA LAT 7540 JSR TERR 7550 LDA UNTCOD 7560 STA UNTCD1 7570 LDX ARMY 7580 LDA WHORDS,X 7590 EOR #$02 7600 AND #$03 7610 TAY 7620 LDA CORPSX,X 7630 CLC 7640 ADC XADD,Y 7650 STA LONG 7660 LDA CORPSY,X 7670 CLC 7680 ADC YADD,Y 7690 STA LAT 7700 JSR TERR 7710 JSR TERRTY 7720 LDA UNTCD1 7730 AND #$3F 7740 LDX #$00 7750 CMP #$3D 7760 BEQ Y01 infantry 7770 LDX #$0A armor 7780 Y01 TXA 7790 LDX MONTH 7800 CLC 7810 ADC SSNCOD-1,X add season index 7820 ADC TRNTYP add terrain index 7830 TAX 7840 LDA TRNTAB,X get net delay 7850 CLC 7860 ADC TICK 7870 LDX ARMY 7880 STA EXEC,X 7890 LDA TRNTYP 7900 CMP #$07 7910 BCC Y02 7920 LDY #$15 7930 LOOP35 LDA LAT 7940 CMP BHY1,Y 7950 BNE Y03 7960 LDA LONG 7970 CMP BHX1,Y 7980 BNE Y03 7990 LDX ARMY 8000 LDA CORPSX,X 8010 CMP BHX2,Y 8020 BNE Y03 8030 LDA CORPSY,X 8040 CMP BHY2,Y 8050 BNE Y03 8060 LDA #$FF 8070 STA EXEC,X 8080 RTS 8090 Y03 DEY 8100 BPL LOOP35 8110 Y02 RTS 8120 ; 8130 ;this subroutine determines the type of terrain 8140 ;in a square 8150 ; 8160 TERRTY LDY #$00 8170 LDA TRNCOD 8180 BEQ DONE 8190 CMP #$7F border? 8200 BNE Y04 8210 LDY #$09 8220 BNE DONE 8230 Y04 INY 8240 CMP #$07 mountain? 8250 BCC DONE 8260 INY 8270 CMP #$4B city? 8280 BCC DONE 8290 INY 8300 CMP #$4F frozen swamp? 8310 BCC DONE 8320 INY 8330 CMP #$69 frozen river? 8340 BCC DONE 8350 INY 8360 CMP #$8F swamp? 8370 BCC DONE 8380 INY 8390 CMP #$A4 river? 8400 BCC DONE 8410 LDX LAT 8420 CPX #$0E 8430 BCC NEXT 8440 CMP #$A9 8450 BCC DONE 8460 NEXT INY 8470 CMP #$BA coastline? 8480 BCC DONE 8490 CPX #$0E 8500 BCC NEXT2 8510 CMP #$BB 8520 BCC DONE 8530 NEXT2 INY 8540 CMP #$BD estuary? 8550 BCC DONE 8560 INY 8570 DONE STY TRNTYP 8580 RTS 8590 ZPVAL .BYTE 0,$64,0,0,0,$22,1,$30,2 8600 PSXVAL .BYTE $E0,0,0,$33,$78,$D6,$10,$27 8610 .BYTE $40,0,1,15,6,41,0,1 8620 COLTAB .BYTE $58,$DC,$2F,0,$6A,$C,$94,$46,$B0 8630 MPTS .BYTE 20,10,10,10 8640 MOSCX .BYTE 20,33,20,6 8650 MOSCY .BYTE 28,36,0,15 8660 TXTMSG ASL A 8670 ASL A 8680 ASL A 8690 ASL A 8700 ASL A 8710 TAX 8720 LDY #$69 8730 LOOP19 LDA TXTTBL,X 8740 SEC 8750 SBC #$20 8760 STA TXTWDW,Y 8770 INY 8780 INX 8790 TXA 8800 AND #$1F 8810 BNE LOOP19 8820 RTS 8830 .END 10 ;EFT VERSION 1.8T (THINKING) 11/30/81 COPYRIGHT CHRIS CRAWFORD 1981 20 ; 30 ;Page zero RAM 40 ; 50 ;These locations are for the mainline routines 60 ; 70 CHUNKX=$BE 80 CHUNKY=$BF 90 CORPS=$B4 0100 *=$C0 0110 MAPPTR *=*+2 0120 ARMY *=*+1 0130 UNITNO *=*+1 0140 DEFNDR *=*+1 0150 TEMPR *=*+1 0160 TEMPZ *=*+1 0170 ACCLO *=*+1 0180 ACCHI *=*+1 0190 TURN *=*+1 0200 LAT *=*+1 0210 LONG *=*+1 0220 RFR *=*+1 0230 TRNTYP *=*+1 0240 SQVAL *=*+1 0250 ; 0260 ; 0270 TRIG0=$D010 0280 CONSOL=$D01F 0290 AUDF1=$D200 0300 AUDC1=$D201 0310 RANDOM=$D20A 0320 NMIEN=$D40E 0330 SETVBV=$E45C 0340 ; 0350 ;THESE VALUES ARE USED BY MAINLINE ROUTINE ONLY 0360 ; 0370 *=$605 0380 TRCOLR *=*+1 0390 EARTH *=*+1 0400 ICELAT *=*+1 0410 SEASN1 *=*+1 0420 SEASN2 *=*+1 0430 SEASN3 *=*+1 0440 DAY *=*+1 0450 MONTH *=*+1 0460 YEAR *=*+1 0470 *=$62A 0480 OLDLAT *=*+1 0490 TRNCOD *=*+1 0500 TLO *=*+1 0510 THI *=*+1 0520 TICK *=*+1 0530 UNTCOD *=*+1 0540 UNTCD1 *=*+1 0550 BVAL *=*+1 best value 0560 BONE *=*+1 best index 0570 DIR *=*+1 direction 0580 TARGX *=*+1 square under consideration 0590 TARGY *=*+1 0600 SQX *=*+1 adjacent square 0610 SQY *=*+1 0620 JCNT *=*+1 counter for adjacent squares 0630 LINCOD *=*+1 code value of line configuration 0640 NBVAL *=*+1 another best value 0650 RORD1 *=*+1 Russian orders 0660 RORD2 *=*+1 0670 HDIR *=*+1 horizontal direction 0680 VDIR *=*+1 vertical direction 0690 LDIR *=*+1 larger direction 0700 SDIR *=*+1 smaller direction 0710 HRNGE *=*+1 horizontal range 0720 VRNGE *=*+1 vertical range 0730 LRNGE *=*+1 larger range 0740 SRNGE *=*+1 smaller range 0750 CHRIS *=*+1 midway counter 0760 RANGE *=*+1 just that 0770 RCNT *=*+1 counter for Russian orders 0780 SECDIR *=*+1 secondary direction 0790 POTATO *=*+1 a stupid temporary 0800 BAKARR *=*+25 0810 LINARR *=*+25 0820 IFR0 *=*+1 0830 IFR1 *=*+1 0840 IFR2 *=*+1 0850 IFR3 *=*+1 0860 XLOC *=*+1 0870 YLOC *=*+1 0880 TEMPX *=*+1 0890 TEMPY *=*+1 0900 LV *=*+5 0910 LPTS *=*+1 0920 COLUM *=*+1 0930 OCOLUM *=*+1 0940 IFRHI *=*+1 0950 PASSCT *=*+1 0960 DELAY *=*+1 0970 HANDCP *=*+1 0980 TOTGS *=*+1 0990 TOTRS *=*+1 1000 OFR *=*+1 1010 ; 1020 ;declarations of routines in other modules 1030 DEFNC=$79B4 1040 ROTARR=$7A78 1050 OBJX=$7A91 1060 JSTP=$799C 1070 *=$7BD9 1080 NDX *=*+24 1090 YINC *=*+1 1100 XINC *=*+4 1110 OFFNC *=*+10 1120 OBJY=$5398 1130 IFR=$698 1140 TERR=$7240 1150 Y00=$72DE 1160 ; 1170 *=$5400 1180 CORPSX *=*+159 x-coords of all units (pixel frame) 1190 CORPSY *=*+159 y-coords of all units (pixel frame) 1200 MSTRNG *=*+159 muster strengths 1210 CSTRNG *=*+159 combat strengths 1220 SWAP *=*+159 terrain code underneath unit 1230 ARRIVE *=*+159 turn of arrival 1240 WORDS *=*+272 various words for messages 1250 CORPT *=*+159 codes for unit types 1260 CORPNO *=*+159 ID numbers of units 1270 HDIGIT *=*+256 tables for displaying numbers (hundreds) 1280 TDIGIT *=*+256 tens tables 1290 ODIGIT *=*+256 ones tables 1300 TXTTBL *=*+96 more text 1310 MONLEN *=*+13 table of month lengths 1320 HMORDS *=*+159 how many orders each unit has in queue 1330 WHORDS *=*+159 what the orders are 1340 WHORDH *=*+159 1350 BEEPTB *=*+4 table of beep tones 1360 ERRMSG *=*+128 table of error messages 1370 XOFF *=*+4 offsets for moving maltakreuze 1380 YOFF *=*+4 1390 MASKO *=*+4 mask values for decoding orders 1400 XADD *=*+4 offsets for moving arrow 1410 YADD *=*+4 1420 TRTAB *=*+13 tree color table 1430 MLTKRZ *=*+8 maltese cross shape 1440 ; 1450 ;RAM from $6000 to $6430 is taken up by 1460 ;character sets and the display list 1470 ; 1480 *=$6431 1490 ARRTAB *=*+32 arrow shapes 1500 *=$6450 1510 TXTWDW *=$6CB1 1520 STKTAB *=*+16 a joystick decoding table 1530 SSNCOD *=*+12 season codes 1540 TRNTAB *=*+60 terrain cost tables 1550 BHX1 *=*+22 intraversible square pair coordinates 1560 BHY1 *=*+22 1570 BHX2 *=*+22 1580 BHY2 *=*+22 1590 EXEC *=*+159 execution times 1600 ; 1610 ; 1620 ;Russian artificial intelligence routine 1630 ; 1640 *=$4700 1650 ; 1660 ;initialization loop 1670 ; 1680 LDX #$01 1690 STA TEMPR 1700 STA TOTRS 1710 STA TOTGS 1720 LDY #$9E 1730 LOOP80 LDA ARRIVE,Y 1740 CMP TURN 1750 BCS Z50 1760 LDA TEMPR 1770 CLC 1780 ADC CSTRNG,Y 1790 STA TEMPR 1800 BCC Z50 1810 INC TOTGS,X 1820 Z50 DEY 1830 CPY #$37 1840 BCS LOOP80 1850 LDX #$00 1860 CPY #$00 1870 BNE LOOP80 1880 ; 1890 ;now shift values 4 places right 1900 ; 1910 LDA TOTRS 1920 STA TEMPR 1930 LDA TOTGS 1940 LDX #$04 1950 LOOP81 ASL A 1960 BCC Z51 1970 ROR A 1980 LOOP82 LSR TEMPR 1990 DEX 2000 BNE LOOP82 2010 BEQ Z52 2020 Z51 DEX 2030 BNE LOOP81 2040 ; 2050 ;now calculate overall force ratio 2060 ; 2070 Z52 LDY #$FF 2080 LDX TEMPR 2090 BEQ Z53 2100 SEC 2110 LOOP83 INY 2120 SBC TEMPR 2130 BCS LOOP83 2140 Z53 STY OFR 2150 ; 2160 ;now calculate individual force ratios 2170 ; 2180 LDX #$9E 2190 LOOP50 STX ARMY 2200 LDA ARRIVE,X 2210 CMP TURN 2220 BCS Y44 2230 JSR CALIFR 2240 LDA CORPSX,X 2250 STA OBJX-55,X 2260 LDA CORPSY,X 2270 STA OBJY-55,X 2280 Y44 DEX 2290 CPX #$37 2300 BCS LOOP50 2310 ; 2320 ;here begins the main loop 2330 ; 2340 MLOOP LDX #$9E outer loop for entire Russian army 2350 LOOP51 STX ARMY inner loop for individual armies 2360 LDA ARRIVE,X 2370 CMP TURN 2380 BCC Z26 2390 Z54 JMP TOGSCN 2400 Z26 LDA CORPT,X 2410 CMP #$04 2420 BEQ Z54 2430 LDA OFR is army near the front? 2440 LSR A 2450 CMP IFR-55,X 2460 BNE Y51 yes 2470 STA BVAL no, treat as reinforcement 2480 ; 2490 ;find nearby beleaguered army 2500 ; 2510 LDY #$9E 2520 LOOP52 LDA ARRIVE,Y 2530 CMP TURN 2540 BCS Y54 2550 LDA CORPSX,Y 2560 SEC 2570 SBC CORPSX,X 2580 JSR INVERT 2590 STA TEMPR 2600 LDA CORPSY,Y 2610 SEC 2620 SBC CORPSY,X 2630 JSR INVERT 2640 CLC 2650 ADC TEMPR 2660 LSR A 2670 LSR A 2680 LSR A 2690 BCS Y54 2700 STA TEMPR 2710 LDA IFR-55,Y 2720 SEC 2730 SBC TEMPR 2740 BCC Y54 no good using nearby armies 2750 CMP BVAL 2760 BCC Y54 2770 STA BVAL 2780 STY BONE 2790 Y54 DEY 2800 CPY #$37 2810 BCS LOOP52 2820 LDY BONE beleagueredest army 2830 LDA CORPSX,Y 2840 STA OBJX-55,X 2850 LDA CORPSY,Y 2860 STA OBJY-55,X 2870 JMP TOGSCN 2880 ; 2890 ;front line armies 2900 ; 2910 Y51 LDA #$FF 2920 STA DIR a direction of $FF means 'stay put' 2930 STA BONE 2940 LDA #$00 2950 STA BVAL 2960 ; 2970 ;ad hoc logic for surrounded people 2980 ; 2990 LDA IFRE-55,X 3000 CMP #$10 3010 BCS Z55 3020 LDA MSTRNG,X 3030 LSR A 3040 CMP CSTRNG,X out of supply? 3050 BCC DRLOOP 3060 Z55 LDA CORPSX,X head due east! 3070 SEC 3080 SBC #$05 3090 BCS Z96 3100 LDA #$00 3110 Z96 STA OBJX-55,X 3120 JMP TOGSCN 3130 DRLOOP LDA OBJX-55,X 3140 LDY DIR 3150 BMI Y55 3160 CLC 3170 ADC XINC,Y 3180 Y55 STA TARGX 3190 LDA OBJY-55,X 3200 LDY DIR 3210 BMI Y56 3220 CLC 3230 ADC YINC,Y 3240 Y56 STA TARGY 3250 LDA #$00 3260 STA SQVAL 3270 LDA DIR 3280 BMI Y57 3290 STA WHORDS,X 3300 JSR Y00 3310 LDY ARMY 3320 LDA EXEC,Y is square accessible? 3330 BPL Y57 yes 3340 JMP EVALSQ no, skip this square 3350 ; 3360 ;now fill in the direct line array 3370 ; 3380 Y57 LDA #$00 3390 STA LINCOD 3400 LDA TARGX 3410 STA SQX 3420 LDA TARGY 3430 STA SQY 3440 LDY #$17 3450 LOOP56 STY JCNT 3460 LDA JSTP,Y 3470 TAY 3480 LDA SQX 3490 CLC 3500 ADC XINC,Y 3510 STA SQX 3520 LDA SQY 3530 CLC 3540 ADC YINC,Y 3550 STA SQY 3560 ; 3570 LDX #$9E 3580 LOOP55 LDA ARRIVE,X 3590 CMP TURN 3600 BEQ Z25 3610 BCS Y58 3620 Z25 LDA OBJX-55,X 3630 CMP SQX 3640 BNE Y58 3650 LDA OBJY-55,X 3660 CMP SQY 3670 BNE Y58 3680 CPX ARMY 3690 BEQ Y31 3700 LDA MSTRNG,X 3710 BNE Y59 3720 Y58 DEX 3730 CPX #$37 3740 BCS LOOP55 3750 Y31 LDA #$00 3760 Y59 LDY JCNT 3770 LDX NDX,Y 3780 STA LINARR,X 3790 DEY 3800 BPL LOOP56 3810 ; 3820 LDX ARMY 3830 LDA MSTRNG,X 3840 STA LINARR+12 3850 LDA #$00 3860 STA ACCLO 3870 STA ACCHI 3880 STA SECDIR 3890 ; 3900 ;build LV array 3910 ; 3920 Y88 LDX #$00 3930 STX POTATO 3940 Y92 LDY #$00 3950 Y90 LDA LINARR,X 3960 BNE Y89 3970 INX 3980 INY 3990 CPY #$05 4000 BNE Y90 4010 Y89 LDX POTATO 4020 TYA 4030 STA LV,X 4040 INX 4050 STX POTATO 4060 CPX #$01 4070 BNE Y91 4080 LDX #$05 4090 BNE Y92 4100 Y91 CPX #$02 4110 BNE Y93 4120 LDX #$0A 4130 BNE Y92 4140 ; 4150 Y93 CPX #$03 4160 BNE Z40 4170 LDX #$0F 4180 BNE Y92 4190 Z40 CPX #$04 4200 BNE Z41 4210 LDX #$14 4220 BNE Y92 4230 ; 4240 Z41 LDA #$00 4250 LDY #$04 4260 LOOP76 LDX LV,Y 4270 CPX #$05 4280 BEQ Z42 4290 CLC 4300 ADC #$28 4310 Z42 DEY 4320 BPL LOOP76 4330 ; 4340 ;now add bonus if central column is otherwise empty 4350 ; 4360 LDY LINARR+10 4370 BNE Y95 4380 LDY LINARR+11 4390 BNE Y95 4400 LDY LINARR+13 4410 BNE Y95 4420 LDY LINARR+14 4430 BNE Y95 4440 CLC 4450 ADC #$30 4460 Y95 STA LPTS 4470 ; 4480 ;now evaluate blocking penalty 4490 ; 4500 LDX #$00 4510 LOOP72 LDA LV,X 4520 CMP #$04 4530 BCS Y96 4540 STA TEMPR 4550 STX TEMPZ 4560 TXA 4570 ASL A 4580 ASL A 4590 ADC TEMPZ 4600 ADC TEMPR 4610 TAY 4620 INY 4630 LDA LINARR,Y 4640 BEQ Y96 4650 LDA LPTS 4660 SEC 4670 SBC #$20 4680 BCS A91 4690 LDA #$00 4700 A91 STA LPTS 4710 Y96 INX 4720 CPX #$05 4730 BNE LOOP72 4740 ; 4750 ;now evaluate vulnerability to penetrations 4760 ; 4770 LDY #$00 4780 LOOP54 STY OCOLUM 4790 LDX #$00 4800 LOOP73 STX COLUM 4810 CPX OCOLUM 4820 BEQ NXCLM 4830 LDA LV,X 4840 SEC 4850 SBC LV,Y 4860 BEQ NXCLM 4870 BMI NXCLM 4880 TAX 4890 LDA #$01 4900 LOOP74 ASL A 4910 DEX 4920 BNE LOOP74 4930 STA TEMPR 4940 LDA LPTS 4950 SEC 4960 SBC TEMPR 4970 BCS Y32 4980 LDA #$00 4990 Y32 STA LPTS 5000 NXCLM LDX COLUM 5010 INX 5020 CPX #$05 5030 BNE LOOP73 5040 INY 5050 CPY #$05 5060 BNE LOOP54 5070 ; 5080 ;now get overall line value weighted by danger vector 5090 ; 5100 LDX ARMY 5110 LDY SECDIR 5120 BNE Z18 5130 LDA IFRN-55,X 5140 JMP Z20 5150 Z18 CPY #$01 5160 BNE Z19 5170 LDA IFRE-55,X 5180 JMP Z20 5190 Z19 CPY #$02 5200 BNE Z17 5210 LDA IFRS-55,X 5220 JMP Z20 5230 Z17 LDA IFRW-55,X 5240 Z20 STA TEMPR 5250 LDX LPTS 5260 BEQ Z49 5270 LDA ACCLO 5280 CLC 5290 LOOP75 ADC TEMPR 5300 BCC Y34 5310 INC ACCHI 5320 CLC 5330 BNE Y34 5340 LDA #$FF 5350 STA ACCHI 5360 Y34 DEX 5370 BNE LOOP75 5380 ; 5390 ;next secondary direction 5400 ; 5410 Z49 INY 5420 CPY #$04 5430 BEQ Y35 5440 STY SECDIR 5450 ; 5460 ;rotate array 5470 ; 5480 LDX #$18 5490 LOOP70 LDA LINARR,X 5500 STA BAKARR,X 5510 DEX 5520 BPL LOOP70 5530 LDX #$18 5540 LOOP71 LDY ROTARR,X 5550 LDA BAKARR,X 5560 STA LINARR,Y 5570 DEX 5580 BPL LOOP71 5590 JMP Y88 5600 ; 5610 ; 5620 Y35 LDA ACCHI 5630 STA SQVAL 5640 ; 5650 ;get range to closest German into NBVAL 5660 ; 5670 Y65 LDY #$36 5680 LDA #$FF 5690 STA NBVAL 5700 LOOP59 LDA ARRIVE,Y 5710 CMP TURN 5720 BEQ Z45 5730 BCS Y68 5740 Z45 LDA CORPSX,Y 5750 SEC 5760 SBC TARGX 5770 JSR INVERT 5780 STA TEMPR 5790 LDA CORPSY,Y 5800 SEC 5810 SBC TARGY 5820 JSR INVERT 5830 CLC 5840 ADC TEMPR 5850 CMP NBVAL 5860 BCS Y68 5870 STA NBVAL 5880 Y68 DEY 5890 BPL LOOP59 5900 ; 5910 ;now determine whether to use offensive or defensive strategy 5920 ; 5930 LDX ARMY 5940 LDA IFR-55,X 5950 STA TEMPR 5960 LDA #$0F 5970 SEC 5980 SBC TEMPR 5990 BCC A40 6000 ASL A OK, let's fool the routine 6010 STA TEMPR 6020 LDA #$09 6030 SEC 6040 SBC NBVAL I know that NBVAL<9 for all front line units 6050 STA NBVAL 6060 ; 6070 ;now add NBVAL*IFR to SQVAL with defensive bonus 6080 ; 6090 A40 LDY NBVAL 6100 BNE Z24 this square occupied by a German? 6110 STY SQVAL yes, do not enter!!! 6120 JMP EVALSQ 6130 Z24 LDY TRNTYP 6140 LDA DEFNC,Y 6150 CLC 6160 ADC NBVAL 6170 TAY 6180 LDA #$00 6190 CLC 6200 LOOP60 ADC TEMPR 6210 BCC Y69 6220 Z22 LDA #$FF 6230 BMI Y71 6240 Y69 DEY 6250 BNE LOOP60 6260 ; 6270 Y71 CLC 6280 ADC SQVAL 6290 BCC X00 6300 LDA #$FF 6310 X00 STA SQVAL 6320 ; 6330 ;extract penalty if somebody else has dibs on this square 6340 ; 6350 LDY #$9E 6360 LOOP58 LDA OBJX-55,Y 6370 CMP TARGX 6380 BNE Y63 6390 LDA OBJY-55,Y 6400 CMP TARGY 6410 BNE Y63 6420 CPY ARMY 6430 BEQ Y63 6440 LDA ARRIVE,Y 6450 CMP TURN 6460 BEQ Z44 6470 BCS Y63 6480 Z44 LDA SQVAL 6490 SBC #$20 6500 STA SQVAL 6510 JMP EVALSQ 6520 Y63 DEY 6530 CPY #$37 6540 BCS LOOP58 6550 ; 6560 ;now extract distance penalty 6570 ; 6580 Y60 LDA CORPSX,X 6590 SEC 6600 SBC TARGX 6610 JSR INVERT 6620 STA TEMPR 6630 LDA CORPSY,X 6640 SEC 6650 SBC TARGY 6660 JSR INVERT 6670 CLC 6680 ADC TEMPR 6690 CMP #$07 6700 BCC Z48 6710 LDA #$00 6720 STA SQVAL this square is too far away 6730 BEQ EVALSQ 6740 ; 6750 Z48 TAX 6760 LDA #$01 6770 LOOP77 ASL A 6780 DEX 6790 BPL LOOP77 6800 STA TEMPR 6810 LDA SQVAL 6820 SEC 6830 SBC TEMPR 6840 STA SQVAL 6850 BCS EVALSQ 6860 LDA #$00 6870 STA SQVAL 6880 ; 6890 ;now evaluate this square 6900 ; 6910 EVALSQ LDY DIR 6920 LDX ARMY 6930 LDA SQVAL 6940 CMP BVAL 6950 BCC Y72 6960 STA BVAL 6970 STY BONE 6980 Y72 INY 6990 CPY #$04 7000 BEQ Y73 7010 STY DIR 7020 JMP DRLOOP 7030 ; 7040 Y73 LDA OBJX-55,X 7050 LDY BONE 7060 BMI Y74 7070 CLC 7080 ADC XINC,Y 7090 Y74 STA OBJX-55,X 7100 LDA OBJY-55,X 7110 LDY BONE 7120 BMI Y75 7130 CLC 7140 ADC YINC,Y 7150 Y75 STA OBJY-55,X 7160 ; 7170 ; 7180 TOGSCN LDA TRIG0 7190 BEQ A30 ignore game console if red button is down 7200 LDA #$08 7210 STA CONSOL 7220 LDA CONSOL 7230 AND #$01 7240 BEQ WRAPUP 7250 A30 DEX 7260 CPX #$37 7270 BCC Y76 7280 JMP LOOP51 7290 Y76 JMP MLOOP 7300 ; 7310 WRAPUP LDX #$9E 7320 LOOP62 STX ARMY 7330 LDA ARRIVE,X 7340 CMP TURN 7350 BCC Y78 7360 JMP Y77 7370 Y78 LDA OBJX-55,X 7380 LDY #$03 7390 SEC 7400 SBC CORPSX,X 7410 BPL Y79 7420 LDY #$01 7430 JSR INVERT+2 7440 Y79 STY HDIR 7450 STA HRNGE 7460 LDY #$00 7470 LDA OBJY-55,X 7480 SEC 7490 SBC CORPSY,X 7500 BPL Y80 7510 LDY #$02 7520 JSR INVERT+2 7530 Y80 STY VDIR 7540 STA VRNGE 7550 CMP HRNGE 7560 BCC Y81 7570 STA LRNGE 7580 LDA HRNGE 7590 STA SRNGE 7600 LDA HDIR 7610 STA SDIR 7620 STY LDIR 7630 JMP Y82 7640 Y81 STA SRNGE 7650 STY SDIR 7660 LDA HRNGE 7670 STA LRNGE 7680 LDY HDIR 7690 STY LDIR 7700 Y82 LDA #$00 7710 STA RCNT 7720 STA RORD1 7730 STA RORD2 7740 LDA LRNGE 7750 CLC 7760 ADC SRNGE 7770 STA RANGE 7780 BEQ Y86 7790 LDA LRNGE 7800 LSR A 7810 STA CHRIS 7820 ; 7830 LOOP61 LDA CHRIS 7840 CLC 7850 ADC SRNGE 7860 STA CHRIS 7870 SEC 7880 SBC RANGE 7890 BCS OVRFLO 7900 LDA LDIR 7910 BCC STIP 7920 OVRFLO STA CHRIS 7930 LDA SDIR 7940 STIP STA DIR 7950 LDA RCNT 7960 AND #$03 7970 TAY 7980 STA TEMPR 7990 LDA RCNT 8000 LSR A 8010 LSR A 8020 TAX 8030 LDA DIR 8040 Y85 DEY 8050 BMI Y84 8060 ASL A 8070 ASL A 8080 JMP Y85 8090 ; 8100 Y84 LDY TEMPR 8110 EOR RORD1,X 8120 AND MASKO,Y 8130 EOR RORD1,X 8140 STA RORD1,X 8150 LDX RCNT 8160 INX 8170 STX RCNT 8180 CPX #$08 8190 BCS Y86 8200 CPX RANGE 8210 BCC LOOP61 8220 Y86 LDX ARMY 8230 LDA RORD1 8240 STA WHORDS,X 8250 LDA RORD2 8260 STA WHORDH,X 8270 LDA RCNT 8280 STA HMORDS,X 8290 ; 8300 Y77 DEX 8310 CPX #$37 8320 BCC Y87 8330 JMP LOOP62 8340 Y87 RTS 8350 ; 8360 ;Subroutine CALIFR determines individual force ratios 8370 ;in all four directions 8380 ; 8390 CALIFR LDY #$00 initialize vectors 8400 STY IFR0 8410 STY IFR1 8420 STY IFR2 8430 STY IFR3 8440 STY IFRHI 8450 INY 8460 STY RFR 8470 LDA CORPSX,X 8480 STA XLOC 8490 LDA CORPSY,X 8500 STA YLOC 8510 LDY #$9E 8520 LOOP53 LDA ARRIVE,Y 8530 CMP TURN 8540 BCS Z07 8550 LDA CORPSY,Y 8560 SEC 8570 SBC YLOC 8580 STA TEMPY save signed vector 8590 JSR INVERT 8600 STA TEMPR 8610 LDA CORPSX,Y 8620 SEC 8630 SBC XLOC 8640 STA TEMPX 8650 JSR INVERT 8660 CLC 8670 ADC TEMPR 8680 Z21 CMP #$09 no point in checking if he's too far 8690 Z07 BCS Y48 8700 LSR A 8710 STA TEMPR this is half of range to unit 8720 ; 8730 ;now select which IFR gets this German 8740 ; 8750 LDA TEMPX 8760 BPL Z00 8770 LDA TEMPY 8780 BPL Z01 8790 LDX #$02 8800 CMP TEMPX 8810 BCS Z02 8820 LDX #$01 8830 BCC Z02 8840 Z00 LDA TEMPY 8850 BPL Z03 8860 JSR INVERT+2 8870 LDX #$02 8880 CMP TEMPX 8890 BCS Z02 8900 LDX #$03 8910 BCC Z02 8920 Z03 LDX #$00 8930 CMP TEMPX 8940 BCS Z02 8950 LDX #$03 8960 BCC Z02 8970 Z01 LDA TEMPX 8980 JSR INVERT+2 8990 LDX #$01 9000 CMP TEMPY 9010 BCS Z02 9020 LDX #$00 9030 Z02 LDA CSTRNG,Y 9040 LSR A 9050 LSR A 9060 LSR A 9070 LSR A 9080 Z11 CPY #$37 9090 BCC Z12 9100 CLC 9110 ADC RFR 9120 BCC Z13 9130 LDA #$FF 9140 Z13 STA RFR 9150 JMP Y48 9160 Z12 CLC 9170 ADC IFR0,X 9180 BCC Z05 9190 LDA #$FF 9200 Z05 STA IFR0,X 9210 Y48 DEY 9220 BEQ Z06 9230 JMP LOOP53 9240 ; 9250 Z06 LDX #$03 9260 LDA #$00 9270 Y37 CLC 9280 ADC IFR0,X 9290 BCC Y36 9300 LDA #$FF 9310 Y36 DEX 9320 BPL Y37 9330 ; 9340 ; 9350 ASL A 9360 ROL IFRHI 9370 ASL A 9380 ROL IFRHI 9390 ASL A 9400 ROL IFRHI 9410 ASL A 9420 ROL IFRHI 9430 LDX #$00 9440 SEC 9450 Z16 SBC RFR 9460 BCS Z14 9470 DEC IFRHI 9480 SEC 9490 BMI Z15 9500 Z14 INX 9510 JMP Z16 9520 Z15 TXA 9530 LDX ARMY 9540 CLC 9550 ADC OFR remember strategic situation 9560 ROR A average strategic with tactical 9570 STA IFR-55,X 9580 ; 9590 ;keep a record of danger vector 9600 ; 9610 LDA IFR0 9620 STA IFRN-55,X 9630 LDA IFR1 9640 STA IFRE-55,X 9650 LDA IFR2 9660 STA IFRS-55,X 9670 LDA IFR3 9680 STA IFRW-55,X 9690 RTS 9700 ; 9710 INVERT BPL Z46 9720 EOR #$FF 9730 CLC 9740 ADC #$01 9750 Z46 RTS 9760 ; 9770 IFRN *=*+104 9780 IFRE *=*+104 9790 IFRS *=*+104 9800 IFRW *=*+104 9810 .END David Leaver 10 Goodparla St, e-mail leaver@netinfo.com.au Hawker, ACT 2614 leaver@alphalink.com.au Australia